@shizuoka-its/core 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # @su-its/core
1
+ # @shizuoka-its/core
2
2
 
3
3
  ITSで使用する共通のデータベースアクセス層とビジネスロジックを提供するライブラリです。
4
4
 
@@ -9,46 +9,47 @@ npm install @shizuoka-its/core
9
9
  ```
10
10
 
11
11
  ## 使い方
12
+
12
13
  ```typescript
13
- import { createClient } from '@su-its/core'
14
+ import { createClient } from "@shizuoka-its/core";
14
15
 
15
16
  async function example() {
16
17
  // クライアントの作成(オプションあり)
17
18
  const client = createClient({
18
19
  prismaOptions: {
19
- log: ['query', 'error']
20
- }
21
- })
20
+ log: ["query", "error"],
21
+ },
22
+ });
22
23
 
23
24
  try {
24
- const { services } = client
25
+ const { services } = client;
25
26
 
26
27
  // メンバーの作成
27
28
  const member = await services.member.create({
28
29
  name: "山田太郎",
29
30
  studentId: "20240001",
30
- departments: ["情報工学科"],
31
- email: "yamada@example.com"
32
- })
31
+ department: "情報工学科",
32
+ email: "yamada@example.com",
33
+ });
33
34
 
34
35
  // Discordアカウントの紐付け
35
36
  await services.discordAccount.create({
36
37
  id: "discord_user_id", // Discord IDをそのまま使用
37
38
  nickName: "Yamada Taro",
38
- memberId: member.id
39
- })
39
+ memberId: member.id,
40
+ });
40
41
 
41
42
  // イベントの作成
42
43
  const event = await services.event.create({
43
44
  name: "プログラミング勉強会",
44
- date: new Date("2024-12-01")
45
- })
45
+ date: new Date("2024-12-01"),
46
+ });
46
47
 
47
48
  // イベントへの参加登録
48
- await services.event.registerMember(event.id, member.id)
49
+ await services.event.registerMember(event.id, member.id);
49
50
  } finally {
50
51
  // 必ずクリーンアップ
51
- await client.disconnect()
52
+ await client.disconnect();
52
53
  }
53
54
  }
54
55
  ```
@@ -56,24 +57,35 @@ async function example() {
56
57
  ## 機能
57
58
 
58
59
  ### メンバー管理
60
+
59
61
  - メンバーの作成、更新、削除
60
62
  - メールアドレスによる検索
61
63
  - 学籍番号による検索
64
+ - Discordアカウントの紐づけ
62
65
 
63
66
  ### Discordアカウント管理
67
+
64
68
  - Discordアカウントの紐付け
65
69
  - メンバーごとのDiscordアカウント取得
66
70
 
67
71
  ### イベント管理
72
+
68
73
  - イベントの作成、更新、削除
69
74
  - イベント参加者の管理
70
75
  - 今後のイベント一覧取得
76
+ - 展示ごとのイベント一覧取得
71
77
 
72
78
  ### 展示管理
79
+
73
80
  - 展示の作成、更新、削除
74
81
  - イベントごとの展示一覧
75
82
  - 展示参加者の管理
76
83
 
84
+ ### ライトニングトーク管理
85
+
86
+ - ライトニングトークの作成、更新、削除
87
+ - イベントごとのライトニングトーク一覧
88
+
77
89
  ## プロジェクト構成
78
90
 
79
91
  ```
@@ -90,23 +102,28 @@ src/
90
102
  ## 開発セットアップ
91
103
 
92
104
  1. リポジトリのクローン
105
+
93
106
  ```bash
94
107
  git clone https://github.com/su-its/core.git
95
108
  cd core
96
109
  ```
97
110
 
98
111
  2. 依存関係のインストール
112
+
99
113
  ```bash
100
114
  npm install
101
115
  ```
102
116
 
103
117
  3. 環境変数の設定
118
+
104
119
  ```bash
105
120
  cp .env.example .env
106
121
  ```
122
+
107
123
  `.env`ファイルを編集してデータベース接続情報を設定
108
124
 
109
125
  4. データベースのマイグレーション
126
+
110
127
  ```bash
111
128
  npx prisma migrate dev
112
129
  ```
@@ -117,4 +134,6 @@ npx prisma migrate dev
117
134
 
118
135
  ## コントリビューター
119
136
 
120
- - @KinjiKawaguchi
137
+ - @KinjiKawaguchi
138
+ - @KikyoNanakusa
139
+
package/dist/index.d.ts CHANGED
@@ -1,12 +1,12 @@
1
- import { type DiscordAccount, type Event, type Exhibit, type Member, type MemberEvent, type MemberExhibit, type Prisma, PrismaClient } from "@prisma/client";
1
+ import { type DiscordAccount, type Event, type Exhibit, type LightningTalk, type Member, type MemberEvent, type MemberExhibit, type Prisma, PrismaClient } from "@prisma/client";
2
2
  export * from "./repositories";
3
3
  export * from "./services";
4
- export type { Member, Event, Exhibit, DiscordAccount, MemberEvent, MemberExhibit, };
4
+ export type { Member, Event, Exhibit, DiscordAccount, MemberEvent, MemberExhibit, LightningTalk, };
5
5
  type ClientOptions = {
6
6
  prismaOptions?: Prisma.PrismaClientOptions;
7
7
  };
8
- export type { IMemberService, IEventService, IExhibitService, IDiscordAccountService, } from "./services/interfaces";
9
- export type { MemberCreateDTO, MemberUpdateDTO, EventCreateDTO, EventUpdateDTO, ExhibitCreateDTO, ExhibitUpdateDTO, DiscordAccountCreateDTO, DiscordAccountUpdateDTO, } from "./services/interfaces";
8
+ export type { IMemberService, IEventService, IExhibitService, IDiscordAccountService, ILightningTalkService, } from "./services/interfaces";
9
+ export type { MemberCreateDTO, MemberUpdateDTO, EventCreateDTO, EventUpdateDTO, ExhibitCreateDTO, ExhibitUpdateDTO, DiscordAccountCreateDTO, DiscordAccountUpdateDTO, LightningTalkCreateDTO, LightningTalkUpdateDTO, } from "./services/interfaces";
10
10
  export declare const createClient: ({ prismaOptions }?: ClientOptions) => {
11
11
  prisma: PrismaClient<{
12
12
  datasources?: Prisma.Datasources | undefined;
@@ -26,12 +26,14 @@ export declare const createClient: ({ prismaOptions }?: ClientOptions) => {
26
26
  exhibit: import("./repositories/exhibit.repository").ExhibitRepository;
27
27
  memberEvent: import("./repositories/memberEvent.repository").MemberEventRepository;
28
28
  memberExhibit: import("./repositories/memberExhibit.repository").MemberExhibitRepository;
29
+ lightningTalk: import("./repositories/lightningTalk.repository").LightningTalkRepository;
29
30
  };
30
31
  services: {
31
32
  member: import("./services").MemberService;
32
33
  discordAccount: import("./services").DiscordAccountService;
33
34
  event: import("./services").EventService;
34
35
  exhibit: import("./services").ExhibitService;
36
+ lightningTalk: import("./services").LightningTalkService;
35
37
  };
36
38
  disconnect: () => Promise<void>;
37
39
  };
@@ -1,6 +1,5 @@
1
1
  import type { PrismaClient } from "@prisma/client";
2
- import type { IBaseRepository } from "./interfaces/base.repository.interface";
3
- export declare abstract class BaseRepository<T, CreateInput, UpdateInput, FindManyArgs = unknown> implements IBaseRepository<T, CreateInput, UpdateInput, FindManyArgs> {
2
+ export declare abstract class BaseRepository<T, CreateInput, UpdateInput, FindManyArgs> {
4
3
  protected readonly prisma: PrismaClient;
5
4
  protected readonly modelName: string;
6
5
  constructor(prisma: PrismaClient, modelName: string);
@@ -2,6 +2,7 @@ import type { PrismaClient } from "@prisma/client";
2
2
  import { DiscordAccountRepository } from "./discordAccount.repository";
3
3
  import { EventRepository } from "./event.repository";
4
4
  import { ExhibitRepository } from "./exhibit.repository";
5
+ import { LightningTalkRepository } from "./lightningTalk.repository";
5
6
  import { MemberRepository } from "./member.repository";
6
7
  import { MemberEventRepository } from "./memberEvent.repository";
7
8
  import { MemberExhibitRepository } from "./memberExhibit.repository";
@@ -12,5 +13,6 @@ export declare const createRepositories: (prisma: PrismaClient) => {
12
13
  exhibit: ExhibitRepository;
13
14
  memberEvent: MemberEventRepository;
14
15
  memberExhibit: MemberExhibitRepository;
16
+ lightningTalk: LightningTalkRepository;
15
17
  };
16
18
  export type Repositories = ReturnType<typeof createRepositories>;
@@ -4,6 +4,7 @@ exports.createRepositories = void 0;
4
4
  const discordAccount_repository_1 = require("./discordAccount.repository");
5
5
  const event_repository_1 = require("./event.repository");
6
6
  const exhibit_repository_1 = require("./exhibit.repository");
7
+ const lightningTalk_repository_1 = require("./lightningTalk.repository");
7
8
  const member_repository_1 = require("./member.repository");
8
9
  const memberEvent_repository_1 = require("./memberEvent.repository");
9
10
  const memberExhibit_repository_1 = require("./memberExhibit.repository");
@@ -15,6 +16,7 @@ const createRepositories = (prisma) => {
15
16
  exhibit: new exhibit_repository_1.ExhibitRepository(prisma),
16
17
  memberEvent: new memberEvent_repository_1.MemberEventRepository(prisma),
17
18
  memberExhibit: new memberExhibit_repository_1.MemberExhibitRepository(prisma),
19
+ lightningTalk: new lightningTalk_repository_1.LightningTalkRepository(prisma),
18
20
  };
19
21
  };
20
22
  exports.createRepositories = createRepositories;
@@ -5,3 +5,4 @@ export * from "./event.repository.interface";
5
5
  export * from "./exhibit.repository.interface";
6
6
  export * from "./memberEvent.repository.interface";
7
7
  export * from "./memberExhibit.repository.interface";
8
+ export * from "./lightningTalk.repository.interface";
@@ -21,3 +21,4 @@ __exportStar(require("./event.repository.interface"), exports);
21
21
  __exportStar(require("./exhibit.repository.interface"), exports);
22
22
  __exportStar(require("./memberEvent.repository.interface"), exports);
23
23
  __exportStar(require("./memberExhibit.repository.interface"), exports);
24
+ __exportStar(require("./lightningTalk.repository.interface"), exports);
@@ -0,0 +1,9 @@
1
+ import type { Exhibit, LightningTalk, Prisma } from "@prisma/client";
2
+ import type { IBaseRepository } from "./base.repository.interface";
3
+ export interface ILightningTalkRepository extends IBaseRepository<LightningTalk & {
4
+ exhibit: Exhibit;
5
+ }, Prisma.LightningTalkCreateInput, Prisma.LightningTalkUpdateInput, Prisma.LightningTalkFindManyArgs> {
6
+ findByEventId(eventId: string): Promise<(LightningTalk & {
7
+ exhibit: Exhibit;
8
+ })[]>;
9
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,26 @@
1
+ import type { Exhibit, LightningTalk, Prisma, PrismaClient } from "@prisma/client";
2
+ import { BaseRepository } from "./base.repository";
3
+ import type { ILightningTalkRepository } from "./interfaces/lightningTalk.repository.interface";
4
+ export declare class LightningTalkRepository extends BaseRepository<LightningTalk & {
5
+ exhibit: Exhibit;
6
+ }, Prisma.LightningTalkCreateInput, Prisma.LightningTalkUpdateInput, Prisma.LightningTalkFindManyArgs> implements ILightningTalkRepository {
7
+ constructor(prisma: PrismaClient);
8
+ create(data: Prisma.LightningTalkCreateInput): Promise<LightningTalk & {
9
+ exhibit: Exhibit;
10
+ }>;
11
+ update(id: string, data: Prisma.LightningTalkUpdateInput): Promise<LightningTalk & {
12
+ exhibit: Exhibit;
13
+ }>;
14
+ delete(id: string): Promise<LightningTalk & {
15
+ exhibit: Exhibit;
16
+ }>;
17
+ findById(id: string): Promise<(LightningTalk & {
18
+ exhibit: Exhibit;
19
+ }) | null>;
20
+ findByEventId(eventId: string): Promise<(LightningTalk & {
21
+ exhibit: Exhibit;
22
+ })[]>;
23
+ findMany(args?: Prisma.LightningTalkFindManyArgs): Promise<(LightningTalk & {
24
+ exhibit: Exhibit;
25
+ })[]>;
26
+ }
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LightningTalkRepository = void 0;
4
+ const base_repository_1 = require("./base.repository");
5
+ class LightningTalkRepository extends base_repository_1.BaseRepository {
6
+ constructor(prisma) {
7
+ super(prisma, "lightningTalk");
8
+ }
9
+ async create(data) {
10
+ return this.prisma.lightningTalk.create({
11
+ data,
12
+ include: { exhibit: true },
13
+ });
14
+ }
15
+ async update(id, data) {
16
+ return this.prisma.lightningTalk.update({
17
+ where: { exhibitId: id },
18
+ data,
19
+ include: { exhibit: true },
20
+ });
21
+ }
22
+ async delete(id) {
23
+ return this.prisma.lightningTalk.delete({
24
+ where: { exhibitId: id },
25
+ include: { exhibit: true },
26
+ });
27
+ }
28
+ async findById(id) {
29
+ return this.prisma.lightningTalk.findUnique({
30
+ where: { exhibitId: id },
31
+ include: { exhibit: true },
32
+ });
33
+ }
34
+ async findByEventId(eventId) {
35
+ return this.prisma.lightningTalk.findMany({
36
+ where: {
37
+ exhibit: {
38
+ eventId,
39
+ },
40
+ },
41
+ include: { exhibit: true },
42
+ });
43
+ }
44
+ async findMany(args) {
45
+ return this.prisma.lightningTalk.findMany({
46
+ ...args,
47
+ include: { ...args === null || args === void 0 ? void 0 : args.include, exhibit: true },
48
+ });
49
+ }
50
+ }
51
+ exports.LightningTalkRepository = LightningTalkRepository;
@@ -2,11 +2,13 @@ import type { Repositories } from "../repositories";
2
2
  import { DiscordAccountService } from "./discordAccount.service";
3
3
  import { EventService } from "./event.service";
4
4
  import { ExhibitService } from "./exhibit.service";
5
+ import { LightningTalkService } from "./lightningTalk.service";
5
6
  import { MemberService } from "./member.service";
6
7
  export declare const createServices: (repositories: Repositories) => {
7
8
  member: MemberService;
8
9
  discordAccount: DiscordAccountService;
9
10
  event: EventService;
10
11
  exhibit: ExhibitService;
12
+ lightningTalk: LightningTalkService;
11
13
  };
12
14
  export type Services = ReturnType<typeof createServices>;
@@ -4,6 +4,7 @@ exports.createServices = void 0;
4
4
  const discordAccount_service_1 = require("./discordAccount.service");
5
5
  const event_service_1 = require("./event.service");
6
6
  const exhibit_service_1 = require("./exhibit.service");
7
+ const lightningTalk_service_1 = require("./lightningTalk.service");
7
8
  const member_service_1 = require("./member.service");
8
9
  const createServices = (repositories) => {
9
10
  return {
@@ -11,6 +12,7 @@ const createServices = (repositories) => {
11
12
  discordAccount: new discordAccount_service_1.DiscordAccountService(repositories.discordAccount, repositories.member),
12
13
  event: new event_service_1.EventService(repositories.event, repositories.member, repositories.memberEvent),
13
14
  exhibit: new exhibit_service_1.ExhibitService(repositories.exhibit, repositories.event, repositories.member, repositories.memberExhibit),
15
+ lightningTalk: new lightningTalk_service_1.LightningTalkService(repositories.lightningTalk, repositories.exhibit),
14
16
  };
15
17
  };
16
18
  exports.createServices = createServices;
@@ -4,4 +4,5 @@ export * from "./member.service";
4
4
  export * from "./discordAccount.service";
5
5
  export * from "./event.service";
6
6
  export * from "./exhibit.service";
7
+ export * from "./lightningTalk.service";
7
8
  export * from "./factory";
@@ -20,4 +20,5 @@ __exportStar(require("./member.service"), exports);
20
20
  __exportStar(require("./discordAccount.service"), exports);
21
21
  __exportStar(require("./event.service"), exports);
22
22
  __exportStar(require("./exhibit.service"), exports);
23
+ __exportStar(require("./lightningTalk.service"), exports);
23
24
  __exportStar(require("./factory"), exports);
@@ -1,7 +1,7 @@
1
- export interface IBaseService<T, CreateDTO, UpdateDTO> {
1
+ export interface IBaseService<T, CreateInput, UpdateInput> {
2
2
  findById(id: string): Promise<T | null>;
3
- create(data: CreateDTO): Promise<T>;
4
- update(id: string, data: UpdateDTO): Promise<T>;
3
+ create(data: CreateInput): Promise<T>;
4
+ update(id: string, data: UpdateInput): Promise<T>;
5
5
  delete(id: string): Promise<T>;
6
6
  findMany(): Promise<T[]>;
7
7
  }
@@ -3,3 +3,4 @@ export * from "./member.service.interface";
3
3
  export * from "./discordAccount.service.interface";
4
4
  export * from "./event.service.interface";
5
5
  export * from "./exhibit.service.interface";
6
+ export * from "./lightningTalk.service.interface";
@@ -19,3 +19,4 @@ __exportStar(require("./member.service.interface"), exports);
19
19
  __exportStar(require("./discordAccount.service.interface"), exports);
20
20
  __exportStar(require("./event.service.interface"), exports);
21
21
  __exportStar(require("./exhibit.service.interface"), exports);
22
+ __exportStar(require("./lightningTalk.service.interface"), exports);
@@ -0,0 +1,36 @@
1
+ import type { Exhibit, LightningTalk } from "@prisma/client";
2
+ import type { IBaseService } from "./base.service.interface";
3
+ export interface LightningTalkCreateDTO {
4
+ exhibitId: string;
5
+ startTime: Date;
6
+ duration: number;
7
+ slideUrl?: string;
8
+ }
9
+ export interface LightningTalkUpdateDTO {
10
+ startTime?: Date;
11
+ duration?: number;
12
+ slideUrl?: string;
13
+ }
14
+ export interface ILightningTalkService extends IBaseService<LightningTalk & {
15
+ exhibit: Exhibit;
16
+ }, // 常にexhibitを含む
17
+ LightningTalkCreateDTO, LightningTalkUpdateDTO> {
18
+ findById(id: string): Promise<(LightningTalk & {
19
+ exhibit: Exhibit;
20
+ }) | null>;
21
+ create(data: LightningTalkCreateDTO): Promise<LightningTalk & {
22
+ exhibit: Exhibit;
23
+ }>;
24
+ update(id: string, data: LightningTalkUpdateDTO): Promise<LightningTalk & {
25
+ exhibit: Exhibit;
26
+ }>;
27
+ delete(id: string): Promise<LightningTalk & {
28
+ exhibit: Exhibit;
29
+ }>;
30
+ findMany(): Promise<(LightningTalk & {
31
+ exhibit: Exhibit;
32
+ })[]>;
33
+ findByEventId(eventId: string): Promise<(LightningTalk & {
34
+ exhibit: Exhibit;
35
+ })[]>;
36
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,29 @@
1
+ import type { Exhibit, LightningTalk, Prisma } from "@prisma/client";
2
+ import type { IExhibitRepository } from "../repositories/interfaces/exhibit.repository.interface";
3
+ import type { ILightningTalkRepository } from "../repositories/interfaces/lightningTalk.repository.interface";
4
+ import { BaseService } from "./base.service";
5
+ import type { ILightningTalkService, LightningTalkCreateDTO, LightningTalkUpdateDTO } from "./interfaces/lightningTalk.service.interface";
6
+ export declare class LightningTalkService extends BaseService<LightningTalk & {
7
+ exhibit: Exhibit;
8
+ }, LightningTalkCreateDTO, LightningTalkUpdateDTO, Prisma.LightningTalkFindManyArgs, Prisma.LightningTalkCreateInput, Prisma.LightningTalkUpdateInput, ILightningTalkRepository> implements ILightningTalkService {
9
+ private readonly exhibitRepository;
10
+ constructor(lightningTalkrepository: ILightningTalkRepository, exhibitRepository: IExhibitRepository);
11
+ findById(id: string): Promise<(LightningTalk & {
12
+ exhibit: Exhibit;
13
+ }) | null>;
14
+ create(data: LightningTalkCreateDTO): Promise<LightningTalk & {
15
+ exhibit: Exhibit;
16
+ }>;
17
+ update(id: string, data: LightningTalkUpdateDTO): Promise<LightningTalk & {
18
+ exhibit: Exhibit;
19
+ }>;
20
+ delete(id: string): Promise<LightningTalk & {
21
+ exhibit: Exhibit;
22
+ }>;
23
+ findMany(): Promise<(LightningTalk & {
24
+ exhibit: Exhibit;
25
+ })[]>;
26
+ findByEventId(eventId: string): Promise<(LightningTalk & {
27
+ exhibit: Exhibit;
28
+ })[]>;
29
+ }
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LightningTalkService = void 0;
4
+ const base_service_1 = require("./base.service");
5
+ class LightningTalkService extends base_service_1.BaseService {
6
+ constructor(lightningTalkrepository, exhibitRepository) {
7
+ super(lightningTalkrepository);
8
+ this.exhibitRepository = exhibitRepository;
9
+ }
10
+ async findById(id) {
11
+ return this.repository.findById(id);
12
+ }
13
+ async create(data) {
14
+ // 展示の存在確認
15
+ const exhibit = await this.exhibitRepository.findById(data.exhibitId);
16
+ if (!exhibit) {
17
+ throw new Error("Exhibit not found");
18
+ }
19
+ // すでにLTとして登録されていないか確認
20
+ const existingLT = await this.repository.findById(data.exhibitId);
21
+ if (existingLT) {
22
+ throw new Error("This exhibit is already registered as a lightning talk");
23
+ }
24
+ return this.repository.create({
25
+ exhibit: { connect: { id: data.exhibitId } },
26
+ startTime: data.startTime,
27
+ duration: data.duration,
28
+ slideUrl: data.slideUrl,
29
+ });
30
+ }
31
+ async update(id, data) {
32
+ // LTの存在確認
33
+ const lightningTalk = await this.repository.findById(id);
34
+ if (!lightningTalk) {
35
+ throw new Error("Lightning talk not found");
36
+ }
37
+ return this.repository.update(id, {
38
+ startTime: data.startTime,
39
+ duration: data.duration,
40
+ slideUrl: data.slideUrl,
41
+ });
42
+ }
43
+ async delete(id) {
44
+ // LTの存在確認
45
+ const lightningTalk = await this.repository.findById(id);
46
+ if (!lightningTalk) {
47
+ throw new Error("Lightning talk not found");
48
+ }
49
+ return this.repository.delete(id);
50
+ }
51
+ async findMany() {
52
+ return this.repository.findMany();
53
+ }
54
+ async findByEventId(eventId) {
55
+ return this.repository.findByEventId(eventId);
56
+ }
57
+ }
58
+ exports.LightningTalkService = LightningTalkService;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shizuoka-its/core",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "ITS core library",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -57,12 +57,28 @@ model Exhibit {
57
57
  eventId String @map("event_id")
58
58
  event Event @relation(fields: [eventId], references: [id])
59
59
  members MemberExhibit[]
60
+
61
+ // 必要だがアクセスしない関係として定義
62
+ lightningTalk LightningTalk?
60
63
  createdAt DateTime @default(now())
61
64
  updatedAt DateTime @updatedAt
62
65
 
63
66
  @@map("exhibits")
64
67
  }
65
68
 
69
+ // イベント中のLT
70
+ model LightningTalk {
71
+ exhibitId String @id @map("exhibit_id") // PKかつFKとして使用
72
+ exhibit Exhibit @relation(fields: [exhibitId], references: [id])
73
+ startTime DateTime @map("start_time")
74
+ duration Int // 分単位
75
+ slideUrl String? @map("slide_url")
76
+ createdAt DateTime @default(now())
77
+ updatedAt DateTime @updatedAt
78
+
79
+ @@map("lightning_talks")
80
+ }
81
+
66
82
  // ジャンクションテーブル(Member - Event)
67
83
  model MemberEvent {
68
84
  id String @id @default(uuid())
@@ -1,97 +0,0 @@
1
- -- CreateTable
2
- CREATE TABLE "members" (
3
- "id" TEXT NOT NULL,
4
- "name" TEXT NOT NULL,
5
- "student_id" TEXT NOT NULL,
6
- "department" TEXT NOT NULL,
7
- "email" TEXT NOT NULL,
8
- "personal_email" TEXT,
9
- "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
10
- "updatedAt" TIMESTAMP(3) NOT NULL,
11
-
12
- CONSTRAINT "members_pkey" PRIMARY KEY ("id")
13
- );
14
-
15
- -- CreateTable
16
- CREATE TABLE "discord_accounts" (
17
- "discord_id" TEXT NOT NULL,
18
- "nick_name" TEXT NOT NULL,
19
- "member_id" TEXT NOT NULL,
20
- "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
21
- "updatedAt" TIMESTAMP(3) NOT NULL,
22
-
23
- CONSTRAINT "discord_accounts_pkey" PRIMARY KEY ("discord_id")
24
- );
25
-
26
- -- CreateTable
27
- CREATE TABLE "events" (
28
- "id" TEXT NOT NULL,
29
- "name" TEXT NOT NULL,
30
- "date" TIMESTAMP(3) NOT NULL,
31
- "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
32
- "updatedAt" TIMESTAMP(3) NOT NULL,
33
-
34
- CONSTRAINT "events_pkey" PRIMARY KEY ("id")
35
- );
36
-
37
- -- CreateTable
38
- CREATE TABLE "exhibits" (
39
- "id" TEXT NOT NULL,
40
- "name" TEXT NOT NULL,
41
- "description" TEXT,
42
- "url" TEXT,
43
- "event_id" TEXT NOT NULL,
44
- "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
45
- "updatedAt" TIMESTAMP(3) NOT NULL,
46
-
47
- CONSTRAINT "exhibits_pkey" PRIMARY KEY ("id")
48
- );
49
-
50
- -- CreateTable
51
- CREATE TABLE "member_events" (
52
- "id" TEXT NOT NULL,
53
- "member_id" TEXT NOT NULL,
54
- "event_id" TEXT NOT NULL,
55
- "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
56
- "updatedAt" TIMESTAMP(3) NOT NULL,
57
-
58
- CONSTRAINT "member_events_pkey" PRIMARY KEY ("id")
59
- );
60
-
61
- -- CreateTable
62
- CREATE TABLE "member_exhibits" (
63
- "id" TEXT NOT NULL,
64
- "member_id" TEXT NOT NULL,
65
- "exhibit_id" TEXT NOT NULL,
66
- "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
67
- "updatedAt" TIMESTAMP(3) NOT NULL,
68
-
69
- CONSTRAINT "member_exhibits_pkey" PRIMARY KEY ("id")
70
- );
71
-
72
- -- CreateIndex
73
- CREATE UNIQUE INDEX "members_email_key" ON "members"("email");
74
-
75
- -- CreateIndex
76
- CREATE UNIQUE INDEX "member_events_member_id_event_id_key" ON "member_events"("member_id", "event_id");
77
-
78
- -- CreateIndex
79
- CREATE UNIQUE INDEX "member_exhibits_member_id_exhibit_id_key" ON "member_exhibits"("member_id", "exhibit_id");
80
-
81
- -- AddForeignKey
82
- ALTER TABLE "discord_accounts" ADD CONSTRAINT "discord_accounts_member_id_fkey" FOREIGN KEY ("member_id") REFERENCES "members"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
83
-
84
- -- AddForeignKey
85
- ALTER TABLE "exhibits" ADD CONSTRAINT "exhibits_event_id_fkey" FOREIGN KEY ("event_id") REFERENCES "events"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
86
-
87
- -- AddForeignKey
88
- ALTER TABLE "member_events" ADD CONSTRAINT "member_events_member_id_fkey" FOREIGN KEY ("member_id") REFERENCES "members"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
89
-
90
- -- AddForeignKey
91
- ALTER TABLE "member_events" ADD CONSTRAINT "member_events_event_id_fkey" FOREIGN KEY ("event_id") REFERENCES "events"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
92
-
93
- -- AddForeignKey
94
- ALTER TABLE "member_exhibits" ADD CONSTRAINT "member_exhibits_member_id_fkey" FOREIGN KEY ("member_id") REFERENCES "members"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
95
-
96
- -- AddForeignKey
97
- ALTER TABLE "member_exhibits" ADD CONSTRAINT "member_exhibits_exhibit_id_fkey" FOREIGN KEY ("exhibit_id") REFERENCES "exhibits"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
@@ -1,3 +0,0 @@
1
- # Please do not edit this file manually
2
- # It should be added in your version-control system (i.e. Git)
3
- provider = "postgresql"