Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발자공부일기

아이탬시뮬레이터 트러블 슈팅 본문

TIL(Today I Learned)

아이탬시뮬레이터 트러블 슈팅

JavaCPP 2024. 11. 28. 20:19

아이템 구매 API를 만드는데 만만치가 않다.

아이템을 구매하면 어떤 아이템을 구매할건지, 어떤 캐릭터가 구매하는지 조회하고아이템의 가격과 갯수만큼 캐릭터의 잔액을 차감시키고 아이템이 인벤토리에 속하도록 구현하고 있는데 아이템의 칼럼안에 어떤 인벤토리에 들어가있는지 인벤토리ID를 넣어서 표현했는다. 근데 생각해보니 그렇게 하면 다른 캐릭터로 동일한 아이템을 구매하면 그 아이탬의 인벤토리ID가 바뀌어서 존재하는 모든 아이템을(다른캐릭터의 인벤토리에 들어있는거 포함)가져오게 되더라. 그래서 스키마를 갈아 엎어야겠다.

model CharInventory {
  charInvenId Int       @id @default(autoincrement()) @map("charInvenId")
  charId      Int       @map("charId")
  Character   Character @relation(fields: [charId], references: [charId], onDelete: Cascade)

  @@map("CharInventory")
}

model CharItemsSet {
  charItemsSetId Int       @id @default(autoincrement()) @map("charItemsSetId")
  charId         Int       @map("charId")
  Character      Character @relation(fields: [charId], references: [charId], onDelete: Cascade)

  @@map("CharItemsSet")
}

model Items {
  itemId Int    @id @default(autoincrement()) @map("itemId")
  charItemsSetId Int?
  charInvenId Int?       
  name   String @map("name")
  power  Int    @map("power")
  health Int    @map("health")
  price  Int    @map("price")
  stack  Int    @default(0) @map("stack")

  @@map("Items")
}

(이미 수정해버리고 난뒤 기억속을 더듬으며 재현한 태이블)

대충 이렇게 구성돼있던 태이블을


model CharInventory {
  charInvenId Int       @id @default(autoincrement()) @map("charInvenId")
  charId      Int       @map("charId")
  itemId      Int?      @map("itemId")
  name        String?   @map("name")
  power       Int?      @map("power")
  health      Int?      @map("health")
  price       Int?      @map("price")
  stack       Int?      @default(0) @map("stack")
  Character   Character @relation(fields: [charId], references: [charId], onDelete: Cascade)

  @@map("CharInventory")
}

model CharItemsSet {
  charItemsSetId Int       @id @default(autoincrement()) @map("charItemsSetId")
  charId         Int       @map("charId")
  itemId         Int?      @map("itemId")
  name           String?   @map("name")
  power          Int?      @map("power")
  health         Int?      @map("health")
  price          Int?      @map("price")
  stack          Int?      @default(0) @map("stack")
  Character      Character @relation(fields: [charId], references: [charId], onDelete: Cascade)

  @@map("CharItemsSet")
}


이렇게 바꿔버렸다. 인밴토리 안에도 아이탬칼럼들을 모두 포함시켜서 아이탬을 획득하거나 장착하면 item태이블에서

아이탬정보를 조회하고 그대로 생성하도록 했다. 이러니까 한결 괜찮았다. 물론 보기에 좋진 않은거같다.

다음에 스키마를 작성할 일이 많을건데 그때는 확실하게 꼼꼼히 나중에 만들 API까지 생각해서 관계도를 그려봐야겠다.

어쨌든 저 태이블로 문제없이 도전까지 마쳤고 생각보다 어렵지 않았다. 로그라이크게임 과제때 시간을 더 많이 쏟은듯하다. 다음 과제도 기대가 된다.

'TIL(Today I Learned)' 카테고리의 다른 글

RESTful API  (0) 2024.12.02
DOM의 개념과 메서드들  (0) 2024.11.29
Prisma Transaction  (0) 2024.11.27
OSI 7계층  (0) 2024.11.26
express-session  (0) 2024.11.26