//! Projects: the §7 multi-repo ownership registry.
//!
//! A project is a repo-root that declaratively MANAGES a slice of the shared
//! group tree. Each group node is owned by exactly one project (recorded in
//! `groups.owner_project`); apps inherit ownership from their nearest claimed
//! ancestor group. Identity is a committed `[project] slug` — stable across
//! clones; the server assigns the UUID.
//!
//! See docs/design/groups-and-project-tool.md §7.

use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};

use crate::{AdminUserId, ProjectId};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Project {
    pub id: ProjectId,
    /// Instance-global identity, declared in the repo's root manifest and
    /// frozen at registration.
    pub slug: String,
    pub name: String,
    /// The admin who first registered the project (`None` once their account
    /// is deleted — the FK is `ON DELETE SET NULL`).
    pub created_by: Option<AdminUserId>,
    pub created_at: DateTime<Utc>,
}
