@shizuoka-its/core 0.1.1

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.
Files changed (67) hide show
  1. package/README.md +120 -0
  2. package/dist/index.d.ts +37 -0
  3. package/dist/index.js +46 -0
  4. package/dist/repositories/base.repository.d.ts +12 -0
  5. package/dist/repositories/base.repository.js +10 -0
  6. package/dist/repositories/discordAccount.repository.d.ts +12 -0
  7. package/dist/repositories/discordAccount.repository.js +51 -0
  8. package/dist/repositories/event.repository.d.ts +14 -0
  9. package/dist/repositories/event.repository.js +67 -0
  10. package/dist/repositories/exhibit.repository.d.ts +13 -0
  11. package/dist/repositories/exhibit.repository.js +51 -0
  12. package/dist/repositories/factory.d.ts +16 -0
  13. package/dist/repositories/factory.js +20 -0
  14. package/dist/repositories/index.d.ts +1 -0
  15. package/dist/repositories/index.js +17 -0
  16. package/dist/repositories/interfaces/base.repository.interface.d.ts +7 -0
  17. package/dist/repositories/interfaces/base.repository.interface.js +2 -0
  18. package/dist/repositories/interfaces/discordAccount.repository.interface.d.ts +5 -0
  19. package/dist/repositories/interfaces/discordAccount.repository.interface.js +2 -0
  20. package/dist/repositories/interfaces/event.repository.interface.d.ts +7 -0
  21. package/dist/repositories/interfaces/event.repository.interface.js +2 -0
  22. package/dist/repositories/interfaces/exhibit.repository.interface.d.ts +6 -0
  23. package/dist/repositories/interfaces/exhibit.repository.interface.js +2 -0
  24. package/dist/repositories/interfaces/index.d.ts +7 -0
  25. package/dist/repositories/interfaces/index.js +23 -0
  26. package/dist/repositories/interfaces/member.repository.interface.d.ts +6 -0
  27. package/dist/repositories/interfaces/member.repository.interface.js +2 -0
  28. package/dist/repositories/interfaces/memberEvent.repository.interface.d.ts +6 -0
  29. package/dist/repositories/interfaces/memberEvent.repository.interface.js +2 -0
  30. package/dist/repositories/interfaces/memberExhibit.repository.interface.d.ts +6 -0
  31. package/dist/repositories/interfaces/memberExhibit.repository.interface.js +2 -0
  32. package/dist/repositories/member.repository.d.ts +13 -0
  33. package/dist/repositories/member.repository.js +44 -0
  34. package/dist/repositories/memberEvent.repository.d.ts +13 -0
  35. package/dist/repositories/memberEvent.repository.js +62 -0
  36. package/dist/repositories/memberExhibit.repository.d.ts +13 -0
  37. package/dist/repositories/memberExhibit.repository.js +62 -0
  38. package/dist/services/base.service.d.ts +17 -0
  39. package/dist/services/base.service.js +18 -0
  40. package/dist/services/discordAccount.service.d.ts +12 -0
  41. package/dist/services/discordAccount.service.js +54 -0
  42. package/dist/services/event.service.d.ts +18 -0
  43. package/dist/services/event.service.js +90 -0
  44. package/dist/services/exhibit.service.d.ts +19 -0
  45. package/dist/services/exhibit.service.js +117 -0
  46. package/dist/services/factory.d.ts +12 -0
  47. package/dist/services/factory.js +16 -0
  48. package/dist/services/index.d.ts +7 -0
  49. package/dist/services/index.js +23 -0
  50. package/dist/services/interfaces/base.service.interface.d.ts +7 -0
  51. package/dist/services/interfaces/base.service.interface.js +2 -0
  52. package/dist/services/interfaces/discordAccount.service.interface.d.ts +14 -0
  53. package/dist/services/interfaces/discordAccount.service.interface.js +2 -0
  54. package/dist/services/interfaces/event.service.interface.d.ts +15 -0
  55. package/dist/services/interfaces/event.service.interface.js +2 -0
  56. package/dist/services/interfaces/exhibit.service.interface.d.ts +16 -0
  57. package/dist/services/interfaces/exhibit.service.interface.js +2 -0
  58. package/dist/services/interfaces/index.d.ts +5 -0
  59. package/dist/services/interfaces/index.js +21 -0
  60. package/dist/services/interfaces/member.service.interface.d.ts +16 -0
  61. package/dist/services/interfaces/member.service.interface.js +2 -0
  62. package/dist/services/interfaces/types.d.ts +1 -0
  63. package/dist/services/interfaces/types.js +2 -0
  64. package/dist/services/member.service.d.ts +14 -0
  65. package/dist/services/member.service.js +52 -0
  66. package/package.json +40 -0
  67. package/prisma/schema.prisma +92 -0
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,16 @@
1
+ import type { Exhibit } from "@prisma/client";
2
+ import type { IBaseService } from "./base.service.interface";
3
+ export interface ExhibitCreateDTO {
4
+ name: string;
5
+ description?: string;
6
+ url?: string;
7
+ eventId: string;
8
+ }
9
+ export interface ExhibitUpdateDTO extends Partial<ExhibitCreateDTO> {
10
+ }
11
+ export interface IExhibitService extends IBaseService<Exhibit, ExhibitCreateDTO, ExhibitUpdateDTO> {
12
+ findByEventId(eventId: string): Promise<Exhibit[]>;
13
+ findWithMembers(id: string): Promise<Exhibit | null>;
14
+ registerMember(exhibitId: string, memberId: string): Promise<void>;
15
+ unregisterMember(exhibitId: string, memberId: string): Promise<void>;
16
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,5 @@
1
+ export * from "./base.service.interface";
2
+ export * from "./member.service.interface";
3
+ export * from "./discordAccount.service.interface";
4
+ export * from "./event.service.interface";
5
+ export * from "./exhibit.service.interface";
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./base.service.interface"), exports);
18
+ __exportStar(require("./member.service.interface"), exports);
19
+ __exportStar(require("./discordAccount.service.interface"), exports);
20
+ __exportStar(require("./event.service.interface"), exports);
21
+ __exportStar(require("./exhibit.service.interface"), exports);
@@ -0,0 +1,16 @@
1
+ import type { Member } from "@prisma/client";
2
+ import type { IBaseService } from "./base.service.interface";
3
+ export interface MemberCreateDTO {
4
+ name: string;
5
+ studentId: string;
6
+ departments: string[];
7
+ email: string;
8
+ personalEmail?: string;
9
+ }
10
+ export interface MemberUpdateDTO extends Partial<MemberCreateDTO> {
11
+ }
12
+ export interface IMemberService extends IBaseService<Member, MemberCreateDTO, MemberUpdateDTO> {
13
+ findByEmail(email: string): Promise<Member | null>;
14
+ findByStudentId(studentId: string): Promise<Member[]>;
15
+ addDiscordAccount(memberId: string, discordId: string, nickName: string): Promise<Member>;
16
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1 @@
1
+ export type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,14 @@
1
+ import type { Member, Prisma } from "@prisma/client";
2
+ import type { IDiscordAccountRepository } from "../repositories/interfaces/discordAccount.repository.interface";
3
+ import type { IMemberRepository } from "../repositories/interfaces/member.repository.interface";
4
+ import { BaseService } from "./base.service";
5
+ import type { IMemberService, MemberCreateDTO, MemberUpdateDTO } from "./interfaces/member.service.interface";
6
+ export declare class MemberService extends BaseService<Member, MemberCreateDTO, MemberUpdateDTO, Prisma.MemberFindManyArgs, Prisma.MemberCreateInput, Prisma.MemberUpdateInput, IMemberRepository> implements IMemberService {
7
+ private readonly discordAccountRepository;
8
+ constructor(memberRepository: IMemberRepository, discordAccountRepository: IDiscordAccountRepository);
9
+ create(data: MemberCreateDTO): Promise<Member>;
10
+ update(id: string, data: MemberUpdateDTO): Promise<Member>;
11
+ findByEmail(email: string): Promise<Member | null>;
12
+ findByStudentId(studentId: string): Promise<Member[]>;
13
+ addDiscordAccount(memberId: string, discordId: string, nickName: string): Promise<Member>;
14
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MemberService = void 0;
4
+ const base_service_1 = require("./base.service");
5
+ class MemberService extends base_service_1.BaseService {
6
+ constructor(memberRepository, discordAccountRepository) {
7
+ super(memberRepository);
8
+ this.discordAccountRepository = discordAccountRepository;
9
+ }
10
+ async create(data) {
11
+ // メールアドレスの重複チェック
12
+ const existingMember = await this.repository.findByEmail(data.email);
13
+ if (existingMember) {
14
+ throw new Error("Email already exists");
15
+ }
16
+ return this.repository.create(data);
17
+ }
18
+ async update(id, data) {
19
+ if (data.email) {
20
+ const existingMember = await this.repository.findByEmail(data.email);
21
+ if (existingMember && existingMember.id !== id) {
22
+ throw new Error("Email already exists");
23
+ }
24
+ }
25
+ return this.repository.update(id, data);
26
+ }
27
+ async findByEmail(email) {
28
+ return this.repository.findByEmail(email);
29
+ }
30
+ async findByStudentId(studentId) {
31
+ return this.repository.findByStudentId(studentId);
32
+ }
33
+ async addDiscordAccount(memberId, discordId, nickName) {
34
+ // メンバーの存在確認
35
+ const member = await this.repository.findById(memberId);
36
+ if (!member) {
37
+ throw new Error("Member not found");
38
+ }
39
+ // Discord IDの重複チェック
40
+ const existingAccount = await this.discordAccountRepository.findById(discordId);
41
+ if (existingAccount) {
42
+ throw new Error("Discord account already exists");
43
+ }
44
+ await this.discordAccountRepository.create({
45
+ id: discordId,
46
+ nickName,
47
+ member: { connect: { id: member.id } },
48
+ });
49
+ return this.repository.findById(memberId);
50
+ }
51
+ }
52
+ exports.MemberService = MemberService;
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@shizuoka-its/core",
3
+ "version": "0.1.1",
4
+ "description": "ITS core library",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/su-its/core.git"
10
+ },
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "prisma"
17
+ ],
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "prepare": "npm run build",
21
+ "prebuild": "rimraf dist",
22
+ "prisma:generate": "prisma generate",
23
+ "prepublishOnly": "npm run build",
24
+ "version:patch": "npm version patch",
25
+ "version:minor": "npm version minor",
26
+ "version:major": "npm version major"
27
+ },
28
+ "keywords": [],
29
+ "author": "",
30
+ "license": "ISC",
31
+ "devDependencies": {
32
+ "@types/node": "^22.9.0",
33
+ "prisma": "^5.22.0",
34
+ "rimraf": "^6.0.1",
35
+ "typescript": "^5.6.3"
36
+ },
37
+ "dependencies": {
38
+ "@prisma/client": "^5.22.0"
39
+ }
40
+ }
@@ -0,0 +1,92 @@
1
+ datasource db {
2
+ provider = "postgresql"
3
+ url = env("DATABASE_URL")
4
+ }
5
+
6
+ generator client {
7
+ provider = "prisma-client-js"
8
+ }
9
+
10
+ model Member {
11
+ id String @id @default(uuid())
12
+ name String
13
+ studentId String @map("student_id")
14
+ departments String[]
15
+ email String @unique
16
+ personalEmail String? @map("personal_email")
17
+ // リレーション
18
+ discordAccounts DiscordAccount[]
19
+ events MemberEvent[]
20
+ exhibits MemberExhibit[]
21
+ createdAt DateTime @default(now())
22
+ updatedAt DateTime @updatedAt
23
+
24
+ @@map("members")
25
+ }
26
+
27
+ model DiscordAccount {
28
+ id String @id @map("discord_id") // DiscordIDをプライマリーキーとして使用
29
+ nickName String @map("nick_name")
30
+ memberId String @map("member_id")
31
+ member Member @relation(fields: [memberId], references: [id])
32
+ createdAt DateTime @default(now())
33
+ updatedAt DateTime @updatedAt
34
+
35
+ @@map("discord_accounts")
36
+ }
37
+
38
+ model Event {
39
+ id String @id @default(uuid())
40
+ name String
41
+ date DateTime
42
+ // リレーション
43
+ members MemberEvent[]
44
+ exhibits Exhibit[]
45
+ createdAt DateTime @default(now())
46
+ updatedAt DateTime @updatedAt
47
+
48
+ @@map("events")
49
+ }
50
+
51
+ model Exhibit {
52
+ id String @id @default(uuid())
53
+ name String
54
+ description String?
55
+ url String?
56
+ // リレーション
57
+ eventId String @map("event_id")
58
+ event Event @relation(fields: [eventId], references: [id])
59
+ members MemberExhibit[]
60
+ createdAt DateTime @default(now())
61
+ updatedAt DateTime @updatedAt
62
+
63
+ @@map("exhibits")
64
+ }
65
+
66
+ // ジャンクションテーブル(Member - Event)
67
+ model MemberEvent {
68
+ id String @id @default(uuid())
69
+ memberId String @map("member_id")
70
+ eventId String @map("event_id")
71
+ member Member @relation(fields: [memberId], references: [id])
72
+ event Event @relation(fields: [eventId], references: [id])
73
+ createdAt DateTime @default(now())
74
+ updatedAt DateTime @updatedAt
75
+
76
+ @@unique([memberId, eventId])
77
+ @@map("member_events")
78
+ }
79
+
80
+ // ジャンクションテーブル(Member - Exhibit)
81
+ model MemberExhibit {
82
+ id String @id @default(uuid())
83
+ memberId String @map("member_id")
84
+ exhibitId String @map("exhibit_id")
85
+ member Member @relation(fields: [memberId], references: [id])
86
+ exhibit Exhibit @relation(fields: [exhibitId], references: [id])
87
+ createdAt DateTime @default(now())
88
+ updatedAt DateTime @updatedAt
89
+
90
+ @@unique([memberId, exhibitId])
91
+ @@map("member_exhibits")
92
+ }