use diesel::{
    dsl::{auto_type, AsSelect},
    pg::Pg,
    prelude::*,
};
use uuid::Uuid;

use crate::{schema::projects, teams::Team};

#[derive(Associations, Clone, Debug, Identifiable, Insertable, Queryable, Selectable)]
#[diesel(table_name = projects)]
#[diesel(belongs_to(Team))]
pub struct Project {
    pub id: Uuid,
    pub team_id: Uuid,
    pub name: String,
}

impl Project {
    #[auto_type(no_type_alias)]
    pub fn all() -> _ {
        let select: AsSelect<Project, Pg> = Project::as_select();
        projects::table.select(select)
    }

    #[auto_type(no_type_alias)]
    pub fn with_team(team_id: Uuid) -> _ {
        projects::team_id.eq(team_id)
    }

    #[auto_type(no_type_alias)]
    pub fn with_name(name: String) -> _ {
        projects::name.eq(name)
    }
}
