47 lines
1.3 KiB
TypeScript
47 lines
1.3 KiB
TypeScript
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;
|
|
}
|