import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, JoinColumn, CreateDateColumn, UpdateDateColumn, } from "typeorm"; import { Playlist } from "./Playlist"; import { User } from "./User"; export type SharePermission = "view" | "edit"; export type ShareStatus = "pending" | "active" | "revoked"; @Entity("playlist_shares") export class PlaylistShare { @PrimaryGeneratedColumn("uuid") id!: string; @Column({ type: "uuid" }) playlistId!: string; @Column({ type: "uuid" }) userId!: string; // Permissions gérées par le propriétaire de la playlist @Column({ type: "enum", enum: ["view", "edit"], default: "view" }) permission!: SharePermission; // Statut géré par le propriétaire : // pending → invitation envoyée, pas encore acceptée // active → invité a accepté // revoked → propriétaire a révoqué l'accès @Column({ type: "enum", enum: ["pending", "active", "revoked"], default: "pending" }) status!: ShareStatus; @CreateDateColumn() createdAt!: Date; @UpdateDateColumn() updatedAt!: Date; @ManyToOne(() => Playlist, (playlist) => playlist.shares, { onDelete: "CASCADE" }) @JoinColumn({ name: "playlistId" }) playlist!: Playlist; @ManyToOne(() => User, (user) => user.playlistShares, { onDelete: "CASCADE" }) @JoinColumn({ name: "userId" }) user!: User; }