From 729b775af664128c69bc8bb12754219099d68b68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20S=C3=B6res?= Date: Thu, 19 Oct 2023 22:55:04 +0200 Subject: [PATCH] make items draggable and support multiple items --- angular-frontend/src/app/app.component.html | 4 +- angular-frontend/src/app/app.component.scss | 9 +++ angular-frontend/src/app/app.component.ts | 70 ++++++++++++++++-- angular-frontend/src/app/app.module.ts | 3 +- .../inventory-item.component.html | 6 +- .../inventory-item.component.scss | 15 ++-- .../inventory-item.component.ts | 18 +++-- .../inventory/inventory.component.html | 6 +- .../inventory/inventory.component.scss | 12 ++- .../inventory/inventory.component.ts | 50 +++++++++++-- .../item-base-selection.component.html | 8 ++ .../item-base-selection.component.scss | 30 ++++++++ .../item-base-selection.component.ts | 22 ++++++ angular-frontend/src/assets/items/diamond.png | Bin 0 -> 4347 bytes .../src/assets/items/gold_bar.png | Bin 0 -> 3716 bytes .../src/assets/items/gold_coin.png | Bin 0 -> 3668 bytes .../src/assets/items/gold_ore.png | Bin 0 -> 4117 bytes .../src/assets/items/health_potion.png | Bin 0 -> 3837 bytes .../src/assets/items/items.afphoto | Bin 0 -> 78251 bytes .../src/assets/items/longsword.png | Bin 0 -> 4292 bytes angular-frontend/src/assets/items/shield.png | Bin 0 -> 4413 bytes .../src/assets/items/shortsword.png | Bin 0 -> 3715 bytes angular-frontend/src/model/index.ts | 20 ++++- angular-frontend/src/store/index.ts | 24 ++++++ .../items/InventoriesWebSocketHandler.java | 2 +- .../springbackend/items/ItemBaseDto.java | 6 ++ .../springbackend/items/ItemBaseEntity.java | 18 +++++ .../items/ItemBasesRepository.java | 9 +++ .../items/ItemBasesWebSocketHandler.java | 29 ++++++++ .../springbackend/items/ItemEntity.java | 7 +- .../springbackend/items/ItemLockDto.java | 6 ++ .../springbackend/items/ItemTransferDto.java | 6 ++ .../items/ItemsWebSocketHandler.java | 53 ++++++++++++- spring-backend/src/main/resources/data.sql | 8 +- 34 files changed, 399 insertions(+), 42 deletions(-) create mode 100644 angular-frontend/src/app/components/item-base-selection/item-base-selection.component.html create mode 100644 angular-frontend/src/app/components/item-base-selection/item-base-selection.component.scss create mode 100644 angular-frontend/src/app/components/item-base-selection/item-base-selection.component.ts create mode 100644 angular-frontend/src/assets/items/diamond.png create mode 100644 angular-frontend/src/assets/items/gold_bar.png create mode 100644 angular-frontend/src/assets/items/gold_coin.png create mode 100644 angular-frontend/src/assets/items/gold_ore.png create mode 100644 angular-frontend/src/assets/items/health_potion.png create mode 100644 angular-frontend/src/assets/items/items.afphoto create mode 100644 angular-frontend/src/assets/items/longsword.png create mode 100644 angular-frontend/src/assets/items/shield.png create mode 100644 angular-frontend/src/assets/items/shortsword.png create mode 100644 angular-frontend/src/store/index.ts create mode 100644 spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemBaseDto.java create mode 100644 spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemBaseEntity.java create mode 100644 spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemBasesRepository.java create mode 100644 spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemBasesWebSocketHandler.java create mode 100644 spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemLockDto.java create mode 100644 spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemTransferDto.java diff --git a/angular-frontend/src/app/app.component.html b/angular-frontend/src/app/app.component.html index d9ed0ae..e134ed0 100644 --- a/angular-frontend/src/app/app.component.html +++ b/angular-frontend/src/app/app.component.html @@ -23,7 +23,9 @@
- +
+ +
diff --git a/angular-frontend/src/app/app.component.scss b/angular-frontend/src/app/app.component.scss index e69de29..132fea6 100644 --- a/angular-frontend/src/app/app.component.scss +++ b/angular-frontend/src/app/app.component.scss @@ -0,0 +1,9 @@ +.inventories-container { + display:flex; + align-content: space-evenly; +} + +.inventory-container { + display:block; + width:270px; +} \ No newline at end of file diff --git a/angular-frontend/src/app/app.component.ts b/angular-frontend/src/app/app.component.ts index 0baccc5..1993671 100644 --- a/angular-frontend/src/app/app.component.ts +++ b/angular-frontend/src/app/app.component.ts @@ -1,8 +1,19 @@ -import { Component, OnDestroy, HostListener } from '@angular/core'; +import {Component, OnDestroy, HostListener} from '@angular/core'; import { Client } from '@stomp/stompjs'; -import {Button, Credentials, Cursor, Stock, User, Inventory, Character, Item} from "../model"; +import { + Credentials, + Cursor, + User, + Inventory, + Character, + Item, + ItemBase, + ItemLockMessage, + ItemTransferMessage +} from "../model"; import { HttpService } from 'src/http.service'; import {CreateItemEvent} from "../events"; +import store from "../store"; @Component({ selector: 'app-root', @@ -14,10 +25,17 @@ export class AppComponent implements OnDestroy { client: Client; httpService: HttpService; users: User[] = []; - currentUser = ""; cursors: Cursor[] = []; inventories?: Inventory[]; + get currentUser(): string { + return store.currentUser; + } + + set currentUser(currentUser: string) { + store.currentUser = currentUser; + } + constructor() { this.httpService = new HttpService(); this.client = new Client(); @@ -29,7 +47,7 @@ export class AppComponent implements OnDestroy { openWebSocketConnection(credentials : Credentials) { this.client.configure({ - debug: (msg) => console.log(msg), + debug: (msg) => console.debug(msg), webSocketFactory: () => this.httpService.getWebSocket(credentials) }) @@ -39,6 +57,8 @@ export class AppComponent implements OnDestroy { this.client.subscribe("/topic/cursor", (payload => this.updateCursors(JSON.parse(payload.body)))); this.client.subscribe("/app/inventory", (payload => this.updateInventory(JSON.parse(payload.body)))); this.client.subscribe("/topic/inventory", (payload => this.updateInventory(JSON.parse(payload.body)))); + this.client.subscribe("/topic/itembases", (payload => this.updateItemBases(JSON.parse(payload.body)))) + this.client.subscribe("/app/itembases", (payload => this.updateItemBases(JSON.parse(payload.body)))) }; this.client.onWebSocketError = (error) => { @@ -118,10 +138,10 @@ export class AppComponent implements OnDestroy { return; } - var newExceptEx = newItems.filter(x => !exInventory.items!.find(y => x.id === y.id)) - var exExceptNew = exInventory.items.filter(x => !newItems!.find(y => x.id === y.id)) - var toUpdate = exInventory.items - .map(exItem => ({ exItem, newItem: newItems!.find(x => exInventory.id === x.id) })) + const newExceptEx = newItems.filter(x => !exInventory.items!.find(y => x.id === y.id)) + const exExceptNew = exInventory.items.filter(x => !newItems!.find(y => x.id === y.id)) + const toUpdate = exInventory.items + .map(exItem => ({ exItem, newItem: newItems!.find(x => exItem.id === x.id) })) .filter(x => !!x.newItem) for (const newItem of newExceptEx) { @@ -132,6 +152,7 @@ export class AppComponent implements OnDestroy { } for (const items of toUpdate) { items.exItem.name = items.newItem!.name + items.exItem.userLock = items.newItem!.userLock; } } @@ -142,4 +163,37 @@ export class AppComponent implements OnDestroy { }); } + private updateItemBases(itemBase: ItemBase[]) { + store.itemBases = itemBase; + } + + onHoverOverItem(item: Item) { + if (!item.userLock) { + this.client?.publish({ + destination: "/app/itemlock", body: JSON.stringify({ + id: item.id, + lock: true + } as ItemLockMessage) + }); + console.log("lock pls") + } + } + onExitItem(item: Item) { + if (item.userLock === this.currentUser) { + this.client?.publish({ + destination: "/app/itemlock", body: JSON.stringify({ + id: item.id, + lock: false + } as ItemLockMessage) + }); + console.log("unlock pls") + } + } + + onItemMoved(event: ItemTransferMessage) { + console.log("moved"); + this.client?.publish({ + destination: "/app/itemtransfer", body: JSON.stringify(event) + }); + } } diff --git a/angular-frontend/src/app/app.module.ts b/angular-frontend/src/app/app.module.ts index 95865cb..1629556 100644 --- a/angular-frontend/src/app/app.module.ts +++ b/angular-frontend/src/app/app.module.ts @@ -11,9 +11,10 @@ import { StockComponent } from './components/stock/stock.component'; import { UserBarComponent } from './components/user-bar/user-bar.component'; import { GameComponent } from './components/game/game.component'; import { balIconAccount, balIconSend, balIconStarShape, balIconStarFull, balIconWeb, balIconX} from '@baloise/design-system-icons' +import { ItemBaseSelectionComponent } from './components/item-base-selection/item-base-selection.component' @NgModule({ - declarations: [AppComponent, CheckInComponent, InventoryComponent, InventoryItemComponent, ChatComponent, GameComponent, StockComponent, UserBarComponent], + declarations: [AppComponent, CheckInComponent, InventoryComponent, InventoryItemComponent, ChatComponent, GameComponent, StockComponent, UserBarComponent, ItemBaseSelectionComponent], imports: [ BrowserModule, // Provide all components and value accessors to the app module. diff --git a/angular-frontend/src/app/components/inventory-item/inventory-item.component.html b/angular-frontend/src/app/components/inventory-item/inventory-item.component.html index 8e4d533..7f351fc 100644 --- a/angular-frontend/src/app/components/inventory-item/inventory-item.component.html +++ b/angular-frontend/src/app/components/inventory-item/inventory-item.component.html @@ -1,3 +1,3 @@ -
- {{item.name}} -
+
+ +
\ No newline at end of file diff --git a/angular-frontend/src/app/components/inventory-item/inventory-item.component.scss b/angular-frontend/src/app/components/inventory-item/inventory-item.component.scss index 5be07bc..0f40069 100644 --- a/angular-frontend/src/app/components/inventory-item/inventory-item.component.scss +++ b/angular-frontend/src/app/components/inventory-item/inventory-item.component.scss @@ -1,7 +1,12 @@ .inventory-item { - width:90px; - height:90px; - border-radius:3px; - background-color: limegreen; - margin:5px; + width:50px; + height:50px; + border-radius:9px; + background-color: white; + margin:3px; + box-shadow: 0 0 5px lightgray; +} + +.locked-item { + background-color:lightgray; } \ No newline at end of file diff --git a/angular-frontend/src/app/components/inventory-item/inventory-item.component.ts b/angular-frontend/src/app/components/inventory-item/inventory-item.component.ts index f6abbaa..fb1ddc5 100644 --- a/angular-frontend/src/app/components/inventory-item/inventory-item.component.ts +++ b/angular-frontend/src/app/components/inventory-item/inventory-item.component.ts @@ -1,19 +1,25 @@ -import {Component, Input} from '@angular/core'; +import {Component, Input, OnInit} from '@angular/core'; import {Item} from "../../../model"; +import store from "../../../store"; @Component({ selector: 'app-inventory-item', templateUrl: './inventory-item.component.html', styleUrls: ['./inventory-item.component.scss'] }) -export class InventoryItemComponent { +export class InventoryItemComponent implements OnInit { @Input() - item!: Item; + item!: Item + get currentUser(): string { + return store.currentUser; + } onDragStart(event: DragEvent) { event.dataTransfer?.clearData() - event.dataTransfer?.setData("application/json", JSON.stringify( { - target: this.item - })) + event.dataTransfer?.setData("application/json", JSON.stringify(this.item)) + } + + ngOnInit(): void { + console.log("hey?") } } diff --git a/angular-frontend/src/app/components/inventory/inventory.component.html b/angular-frontend/src/app/components/inventory/inventory.component.html index 0cfdd8b..338e40f 100644 --- a/angular-frontend/src/app/components/inventory/inventory.component.html +++ b/angular-frontend/src/app/components/inventory/inventory.component.html @@ -4,8 +4,10 @@
- - + +
+ +
\ No newline at end of file diff --git a/angular-frontend/src/app/components/inventory/inventory.component.scss b/angular-frontend/src/app/components/inventory/inventory.component.scss index f0f50d4..cff6546 100644 --- a/angular-frontend/src/app/components/inventory/inventory.component.scss +++ b/angular-frontend/src/app/components/inventory/inventory.component.scss @@ -3,5 +3,15 @@ flex-wrap: wrap; } .inventory { - width:348px; +} +.inventory-add-button { + width:50px; + height:50px; + border-radius:9px; + background-color: white; + margin:3px; + box-shadow: 0 0 5px lightgray; + display:flex; + justify-content: center; + align-items: center; } \ No newline at end of file diff --git a/angular-frontend/src/app/components/inventory/inventory.component.ts b/angular-frontend/src/app/components/inventory/inventory.component.ts index 565daab..2e1d7ff 100644 --- a/angular-frontend/src/app/components/inventory/inventory.component.ts +++ b/angular-frontend/src/app/components/inventory/inventory.component.ts @@ -1,6 +1,8 @@ import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core'; -import {Inventory} from "../../../model"; +import {Inventory, Item, ItemBase, ItemTransferMessage} from "../../../model"; import {CreateItemEvent} from "../../../events"; +import {BalModalService} from "@baloise/design-system-components-angular"; +import {ItemBaseSelectionComponent} from "../item-base-selection/item-base-selection.component"; @Component({ selector: 'app-inventory', @@ -13,22 +15,48 @@ export class InventoryComponent implements OnInit { inventory!: Inventory @Output() - moveRequested = new EventEmitter + itemCreated = new EventEmitter @Output() - itemCreated = new EventEmitter + hoverOverItem = new EventEmitter; + + @Output() + exitItem = new EventEmitter; + + @Output() + moveItem = new EventEmitter + + constructor(private modalService: BalModalService) {} ngOnInit(): void { console.log(this.inventory) } - //todo: do propurle - temporaryCreate() { - this.itemCreated.emit({ name: 'gold' }) + async onCreateNew() { + const modal = await this.modalService.create({ + component: ItemBaseSelectionComponent, + componentProps: { + onSelected: (base: ItemBase) => { + modal.dismiss(); + this.createItemFromSelectedItemBase(base) + } + } + }) + await modal.present(); + } + + createItemFromSelectedItemBase(base: ItemBase) { + this.itemCreated.emit({ name: base.name }) } onDrop(event: DragEvent) { - console.log("drop", event.dataTransfer?.getData("application/json")); + if (event.dataTransfer) { + const data = JSON.parse(event.dataTransfer.getData("application/json")) as Item + this.moveItem.emit({ + id: data.id, + targetInventoryId: this.inventory.id + }) + } } onDragOver(event: DragEvent) { @@ -40,4 +68,12 @@ export class InventoryComponent implements OnInit { event.preventDefault(); console.log("enter"); } + + onHoverOverItem(item: Item) { + this.hoverOverItem.emit(item); + } + + onExitItem(item: Item) { + this.exitItem.emit(item) + } } diff --git a/angular-frontend/src/app/components/item-base-selection/item-base-selection.component.html b/angular-frontend/src/app/components/item-base-selection/item-base-selection.component.html new file mode 100644 index 0000000..328eaff --- /dev/null +++ b/angular-frontend/src/app/components/item-base-selection/item-base-selection.component.html @@ -0,0 +1,8 @@ +
+
+
+ +
+
{{base.label}}
+
+
\ No newline at end of file diff --git a/angular-frontend/src/app/components/item-base-selection/item-base-selection.component.scss b/angular-frontend/src/app/components/item-base-selection/item-base-selection.component.scss new file mode 100644 index 0000000..78a29cf --- /dev/null +++ b/angular-frontend/src/app/components/item-base-selection/item-base-selection.component.scss @@ -0,0 +1,30 @@ +.item-base { + width:50px; + height:50px; + border-radius:9px; + background-color: white; + margin:3px; + box-shadow: 0 0 5px lightgray; +} + +.item-base-container { + display: flex; + justify-content: space-evenly; + flex-wrap:wrap; +} + +.item-base-group { + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + width: 150px; + padding:10px; + margin-bottom: 10px; + border-radius:9px; + cursor: grab; +} + +.item-base-group:hover { + background-color:lightgray; +} \ No newline at end of file diff --git a/angular-frontend/src/app/components/item-base-selection/item-base-selection.component.ts b/angular-frontend/src/app/components/item-base-selection/item-base-selection.component.ts new file mode 100644 index 0000000..c7785a5 --- /dev/null +++ b/angular-frontend/src/app/components/item-base-selection/item-base-selection.component.ts @@ -0,0 +1,22 @@ +import {Component, Input} from '@angular/core'; +import store from "../../../store"; +import {ItemBase} from "../../../model"; + +@Component({ + selector: 'app-item-base-selection', + templateUrl: './item-base-selection.component.html', + styleUrls: ['./item-base-selection.component.scss'] +}) +export class ItemBaseSelectionComponent { + + @Input() + onSelected?: (base: ItemBase) => void; + + get itemBases() { + return store.itemBases; + } + + onItemClicked(base: ItemBase) { + this.onSelected && this.onSelected(base); + } +} diff --git a/angular-frontend/src/assets/items/diamond.png b/angular-frontend/src/assets/items/diamond.png new file mode 100644 index 0000000000000000000000000000000000000000..71f83d15488987c8a72ddb0d3f753243d9da2645 GIT binary patch literal 4347 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 Gi2njKc?8A) literal 0 HcmV?d00001 diff --git a/angular-frontend/src/assets/items/gold_ore.png b/angular-frontend/src/assets/items/gold_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..6423a4bf02f4b3a29b79b2612680aa139778a12e GIT binary patch literal 4117 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 IyADSF2M=||mH+?% literal 0 HcmV?d00001 diff --git a/angular-frontend/src/assets/items/health_potion.png b/angular-frontend/src/assets/items/health_potion.png new file mode 100644 index 0000000000000000000000000000000000000000..e35c1d51b69da6b1e5d4a0b29bce042ced062f69 GIT binary patch literal 3837 zcmai12|Uzm7oMaNQPyy&G4^dXhGsIB>{((g8B&HB3}#^lgV2={W6M%f(e36-whC87 zNtUrB;g(C3t;LqDEZM&QsITt*y7&9$_xsPx`#$G9?>Wyo@0s7k+u526@=NoBKp;U& z3lkjhN#s6!+ktobaHb; KjjbYZ&KSYy0s6exj6^CUr86gq%|Kzar&I>F1I!~}bi ze8^NRWV*T*0wxo&kfSIYxDDNyje?LF*p;mug<^<3-M(# z=@=L+G&B?%ss*J5`M?lpG#Um+!jMQ!z(SJ|Mr9IMnpB27m*NYD35nqqM5Z&zG%A?O zN${ivGqDf|fP=r1lUU^M>{Q0r^Z_AYTm*)I!eM_lXOg}D!JLcyU{3d?F=-568vR=W ze>vhC{DUJP-`~5i2=u=*wz2u&<`l|b(qJ%6LjWPZiu#wB{&N7sF^o=v;YbWxaF7?t zG=xND%5N&c)dgcmW|0D1Ovn@xl>w-Wg&^SY|3dNqgc{QVXh9A@Taf^_O((8)7)uJl zhjf%oWcq$*`wm!>s6Ia++~@*=x#e}Dl7W1X-`QNgV_1k591i=_N%+6VzEuOW8KDi0 z2n49LN%-rNaQeWbZH&0u!)8!jW2< z2)HH!?TFC9AayVZZFM*j^Hr}+Yv4u@2~5KOv*-3TSP$^9vB6l78BAJG*yh%kW_KV3 zep!8429P(q91Py9HHP5Dl?e->2hoVZUL@jXS^(V_ltJ@mh7y8EMm|89u@EC~Z!#cg z7}$>6zhDFu0f*}R)g#oG1hD;cZm_SB!MOMCKcVTteh6M~)8J1R74ZAA2MhpUlEA)= z5@7Ld7?G&J1PTI14T@oy0|IS{Ap>Rkp&THP%K6~))mB@L_QcgH_?gJ_+uymvcimY{ z-?03y#mqLp^CoaVM%6J9xpw65T~y`A>o(89|f7+P#MmpJ)Bd3*+Ed{8sNZ(Qq_S-AMrnnaxJ?TAU& z%#JnxPl$HMI(v1!f^jov7LFB;DtuX^*k7cSnKctnzbCg>?BU%{zVW#f+l-}dZ+V$r zr^+njW{NOQhtt#59~xqsm_ILY%Dxa+%1$*5V2~v=8M05 zb?{Z}?HE#|jLVB2xypTmdJa!d^u`V8b_$S+y>?6Y41K&_WO{EXV5{qNaHCy9npMA4 zN_`tb+vHKiwqSN%&e|k{xnl^mTwwJ_?-?lib>&CFV^p7^Hf@p(@T0MlZh>cjKu~$^ zvxSvs5CQ`6ov<`9a%5eZ8VF0g>LkUP?a-Kd)+MFFrr>Wh#_&6yPuL>LHVZVex0euB zklSt~vSBAGIGC1wia$ZJ-y-oELQ<@Mo30&#FTvBu)y~x<|C*+_mDMlLo-T1{N{m}m z%nx&~!ls|B*igNZjMwuy5xEgh%W~e~?76Q_Nq14~&r0v>OR|p7-;)conV8*GVg0Bk z`+7QW7yH58-3y$k1AGzJs^5kk89BZx8vQsDV*$SkPIaH*kxA+q&VyXx%!1ZW*HLn! zK_MLDO8(a(MwvNC0iv`}gWIg_#}Vi%PjrJ>z|5p>I3HGWk6cdd=|Cuz*3+OYuNAmG zD%NclFC+ibY5D-?eN&<7Ipv$fB`gGf_^Y=kFj z{rRAzJ0x*;g5^onzJQj=KEqySv)QV#Gv~O=(RZIB2HUTnUZ}&ZO1iln;HYxi8j99< zy;J71k83<8Ey+HNIVz5ESQ?gfU(I`+du21{5 zY8^A)X-Y1trDBr(Znr^HQUv_Ad-~-9nKM08qv!|M{a+BwhP2eOa^iCy*=EHb9ln6b z>4puZ576cJsYkgs+UuzMyS+H<7;65}Vo%`d_o;0STlyjDZ_QR^HlQKd4(vkzsQsxP zBa4bP>y;|&nj&gaeNRWW%vyT?MrpFKYZC8L*KhW^{;W1`qG4|QqBwl`88y@7ccr_J zbp$tPg+g7Eg422fce{`bZMu6%S&X zrcP~5zpNF=o1?Wl4{l$!f{E3R#=gDjtVcQ~7a_E9Ol#FQ7K$fdCb1{P)r(%1m9g`F z4d5B8V?57Y$$6?P{jXL+5HP&BageofwmoQ5srl zEXB5qjGQV;3_A?n)vBC&zBFf`;f5@M*mg;?QHZT@7Ui>)ZQRf&jdWcv+ofxjHbF#O zv^vro!=7)@9uUag+Z}vfWyz?w)l8$n=WKNJq1MP3(t=7kipxt$W|0}m`50CC>OpPQ zfn}cL%;)x2Ju|<)Tu2WH9p7Vq$KkyMHZX0peqz9tCK1^cn4x**;Nxqo0rkN9McLsl zgh@#kvTC8BS>=g>J&VQj_nicfIqJgPP!_Rb`5~tkSa=z%jDG#_C5(&N4W|4qO<_ZX>&O;y4vR*`ui#DG` zm(r_++!aZqpq*?DhiKMKf&HS5Q55z&6sgL*>kiFt=5tk=KyQMB8|v1r)}cAGlIN_M zGB=^myAF4TI2rcv8l>vZT~Xqo4?l*T&T+58+3#4pelRCP&s>W+BHgKYSuq7?uWUuC z{v5(?a#KN{mutD?_wB!zg+zQ%t7=NZuQN4A*|_3LUd|AXY_ecg)3Y>Q^m(-W z_kl{oB8r(|&`KgPAW;RcA^7JPzmu7DdfxkG# z=cTAmIVm)l390O{@SbZ9KkU=z z2hl54HX|CZL3`E0xXF8S5GLX%qrTXwcz+bTR9rJ_^+u+7x$Be9R{en0$N6t`I#nIA zsVDIni|nQ_o7tfcUI}0-F4QR+f{!bowO5QEoOYaX=d1L3iv*L9V zkQ?>9?L!+`zCX((u^SR8x+`sCMYV^A3&gC;4V~FA`q{T^>G5C8cf~A=boiCmdbM5h z{aNGU=R!vL(YuRmhx^WbJ1@L7d~YHUD}(<~zw(mRG0-^q&>`O0{1VG$PIRSwEQ*r= zw#AhyQAsXx3ZtFH*h1os`e%p9uN{9&9T0kuX6^d?Y=o@B(DHod?R3*yl}9Uz>w#Wr zQ*>il*DaFIl?LEv(3d*8Vy1yh1iB4f(wFV9ZW+WD95AhBn`GU#+h}>E+QQ#!n+)?^ zU2B|n!980_Pws9U54(14cCQs<-7L+;A&oqYqS+?~8OTnnd-Pkj=i!WlL$`RHfFyOO zjeEex0!y9zgDrE#nw>JI1!n-g7t85S&?3V5zNhxxT9o~Lsq;MruQG5~U3yd&k{XBF zH=O@~YAHHWo>Ype>%SmAcSe&Y%m_B0REsac56`q;z?4*VoqLN>-S1j5`ue`Z!jUJY zOWPkRGE;uZRA3CJEh8sHIHYXXu zPWzBXZ}aO!x8)75$t?>Nm@^IMM_n;SU@PKE)wYiG?)wvOY@%Hg`gNLHdsR4sYJC>D kPnW<>j(_vA#;@;q^zep<8sg1e?!Q(`Q(KdgLmn~z2FyBq)&Kwi literal 0 HcmV?d00001 diff --git a/angular-frontend/src/assets/items/items.afphoto b/angular-frontend/src/assets/items/items.afphoto new file mode 100644 index 0000000000000000000000000000000000000000..200bdd4af31fd058242f1aaead426d2a5d4b27dc GIT binary patch literal 78251 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 EAF7Ql;{X5v literal 0 HcmV?d00001 diff --git a/angular-frontend/src/assets/items/longsword.png b/angular-frontend/src/assets/items/longsword.png new file mode 100644 index 0000000000000000000000000000000000000000..8ecd0e6121fee95248184a642188c41fc158b652 GIT binary patch literal 4292 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 G^Zy6_VqpOQ literal 0 HcmV?d00001 diff --git a/angular-frontend/src/assets/items/shield.png b/angular-frontend/src/assets/items/shield.png new file mode 100644 index 0000000000000000000000000000000000000000..09b065e4baad32fcb39779c25b4cbe8cae173444 GIT binary patch literal 4413 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 literal 0 HcmV?d00001 diff --git a/angular-frontend/src/model/index.ts b/angular-frontend/src/model/index.ts index ad792c8..843b5e0 100644 --- a/angular-frontend/src/model/index.ts +++ b/angular-frontend/src/model/index.ts @@ -45,12 +45,13 @@ export interface Pickup { } export interface Item { - id: string; + userLock: string; + id: number; name: string; } export interface Inventory { - id: string; + id: number; owner?: string; items: Item[]; } @@ -59,4 +60,19 @@ export interface ChatMessage { user: User, text: string, timestamp: Date +} + +export interface ItemBase { + name: string; + label: string; +} + +export interface ItemLockMessage { + id: number, + lock: boolean +} + +export interface ItemTransferMessage { + id: number, + targetInventoryId: number } \ No newline at end of file diff --git a/angular-frontend/src/store/index.ts b/angular-frontend/src/store/index.ts new file mode 100644 index 0000000..081b035 --- /dev/null +++ b/angular-frontend/src/store/index.ts @@ -0,0 +1,24 @@ +import {ItemBase} from "../model"; + +//me very lazy +export class MyStore { + private _itemBases: ItemBase[] = [] + private _currentUser?: string; + public get itemBases(): ItemBase[] { + return this._itemBases; + } + public set itemBases(itemBases: ItemBase[]) { + this._itemBases = itemBases; + } + + public get currentUser(): string { + return this._currentUser!; + } + + public set currentUser(currentUser: string) { + this._currentUser = currentUser; + } +} + +const store = new MyStore() +export default store \ No newline at end of file diff --git a/spring-backend/src/main/java/com/baloise/collab/springbackend/items/InventoriesWebSocketHandler.java b/spring-backend/src/main/java/com/baloise/collab/springbackend/items/InventoriesWebSocketHandler.java index 93ba855..ac990d6 100644 --- a/spring-backend/src/main/java/com/baloise/collab/springbackend/items/InventoriesWebSocketHandler.java +++ b/spring-backend/src/main/java/com/baloise/collab/springbackend/items/InventoriesWebSocketHandler.java @@ -40,7 +40,7 @@ public List fetchAllInventories() { inventory.getOwner(), inventory.getItems().stream().map(item -> { return new ItemDto( - item.getName(), + item.getItemBase().getName(), item.getId(), item.getUserLock() ); diff --git a/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemBaseDto.java b/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemBaseDto.java new file mode 100644 index 0000000..4fe2f61 --- /dev/null +++ b/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemBaseDto.java @@ -0,0 +1,6 @@ +package com.baloise.collab.springbackend.items; + +public record ItemBaseDto( + String name, + String label +){} diff --git a/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemBaseEntity.java b/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemBaseEntity.java new file mode 100644 index 0000000..d7e897b --- /dev/null +++ b/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemBaseEntity.java @@ -0,0 +1,18 @@ +package com.baloise.collab.springbackend.items; + +import jakarta.persistence.*; +import lombok.*; + +@Getter +@Setter +@Entity +@NoArgsConstructor +@With +@AllArgsConstructor +@Table(name="item_base") +public class ItemBaseEntity { + @Id + private String name; + + private String label; +} diff --git a/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemBasesRepository.java b/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemBasesRepository.java new file mode 100644 index 0000000..2d0e75a --- /dev/null +++ b/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemBasesRepository.java @@ -0,0 +1,9 @@ +package com.baloise.collab.springbackend.items; + +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ItemBasesRepository extends CrudRepository { + +} diff --git a/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemBasesWebSocketHandler.java b/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemBasesWebSocketHandler.java new file mode 100644 index 0000000..3cfe53f --- /dev/null +++ b/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemBasesWebSocketHandler.java @@ -0,0 +1,29 @@ +package com.baloise.collab.springbackend.items; + +import lombok.RequiredArgsConstructor; +import lombok.extern.java.Log; +import org.springframework.messaging.simp.annotation.SubscribeMapping; +import org.springframework.stereotype.Controller; + +import java.util.ArrayList; +import java.util.List; + +@RequiredArgsConstructor +@Log +@Controller +public class ItemBasesWebSocketHandler { + + private final ItemBasesRepository itemBasesRepository; + + public List fetchAllItemBases() { + var itemBases = new ArrayList(); + itemBasesRepository.findAll() + .forEach(base -> itemBases.add(new ItemBaseDto(base.getName(), base.getLabel()))); + return itemBases; + } + + @SubscribeMapping("/itembases") + public List initItemBases() { + return fetchAllItemBases(); + } +} diff --git a/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemEntity.java b/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemEntity.java index 987f44c..6fd29ba 100644 --- a/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemEntity.java +++ b/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemEntity.java @@ -16,11 +16,14 @@ public class ItemEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; + @Column(nullable = true) private String userLock; - private String name; - @ManyToOne @JoinColumn(name = "inventoryId") private InventoryEntity inventory; + + @ManyToOne + @JoinColumn(name = "name") + private ItemBaseEntity itemBase; } diff --git a/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemLockDto.java b/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemLockDto.java new file mode 100644 index 0000000..531c518 --- /dev/null +++ b/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemLockDto.java @@ -0,0 +1,6 @@ +package com.baloise.collab.springbackend.items; + +public record ItemLockDto( + long id, + boolean lock +) {} diff --git a/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemTransferDto.java b/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemTransferDto.java new file mode 100644 index 0000000..988cba8 --- /dev/null +++ b/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemTransferDto.java @@ -0,0 +1,6 @@ +package com.baloise.collab.springbackend.items; + +public record ItemTransferDto( + long id, + long targetInventoryId +) {} diff --git a/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemsWebSocketHandler.java b/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemsWebSocketHandler.java index e94fe48..4aadbf4 100644 --- a/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemsWebSocketHandler.java +++ b/spring-backend/src/main/java/com/baloise/collab/springbackend/items/ItemsWebSocketHandler.java @@ -1,14 +1,20 @@ package com.baloise.collab.springbackend.items; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; import lombok.extern.java.Log; import org.springframework.messaging.Message; import org.springframework.messaging.handler.annotation.MessageMapping; import org.springframework.messaging.handler.annotation.SendTo; +import org.springframework.messaging.simp.SimpMessagingTemplate; +import org.springframework.security.authentication.AbstractAuthenticationToken; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.stereotype.Controller; import java.util.List; +import java.util.Objects; +import java.util.Optional; @RequiredArgsConstructor @Log @@ -18,18 +24,61 @@ public class ItemsWebSocketHandler { private final ObjectMapper objectMapper; private final InventoriesWebSocketHandler inventoriesWebSocketHandler; private final InventoriesRepository inventoriesRepository; + private final ItemBasesRepository itemBasesRepository; private final ItemsRepository itemsRepository; + private final SimpMessagingTemplate messageSender; @MessageMapping("/itemcreation") @SendTo("/topic/inventory") public List handleItemCreation(Message message) throws Exception { var newItem = objectMapper.readValue(message.getPayload(), CreateItemDto.class); var inventory = inventoriesRepository.findById(newItem.targetInventoryId()).orElseThrow(); + var itemBase = itemBasesRepository.findById(newItem.name()).orElseThrow(); var itemEntity = new ItemEntity() - .withName(newItem.name()) + .withItemBase(itemBase) .withInventory(inventory); - //.withInventoryId(newItem.targetInventoryId()); itemsRepository.save(itemEntity); return inventoriesWebSocketHandler.fetchAllInventories(); } + + @MessageMapping("/itemlock") + public void handleItemLock(Message message) throws JsonProcessingException { + var dto = objectMapper.readValue(message.getPayload(), ItemLockDto.class); + var item = itemsRepository.findById(dto.id()).orElseThrow(); + var optionalToken = Optional.ofNullable((UsernamePasswordAuthenticationToken) message.getHeaders().get("simpUser")); + String userName = optionalToken.map(AbstractAuthenticationToken::getName).orElse("dummyUser"); + if (dto.lock()) { + if (item.getUserLock() == null) { + item.setUserLock(userName); + itemsRepository.save(item); + notifyInventoryChange(); + } + } else { + if (Objects.equals(item.getUserLock(), userName)) { + item.setUserLock(null); + itemsRepository.save(item); + notifyInventoryChange(); + } + } + } + + @MessageMapping("/itemtransfer") + public void handleItemTransfer(Message message) throws JsonProcessingException { + var dto = objectMapper.readValue(message.getPayload(), ItemTransferDto.class); + var item = itemsRepository.findById(dto.id()).orElseThrow(); + var optionalToken = Optional.ofNullable((UsernamePasswordAuthenticationToken) message.getHeaders().get("simpUser")); + String userName = optionalToken.map(AbstractAuthenticationToken::getName).orElse("dummyUser"); + + if (Objects.equals(item.getUserLock(), userName)) { + var targetInventory = inventoriesRepository.findById(dto.targetInventoryId()).orElseThrow(); + item.setInventory(targetInventory); + item.setUserLock(null); + itemsRepository.save(item); + notifyInventoryChange(); + } + } + + private void notifyInventoryChange() { + messageSender.convertAndSend("/topic/inventory", inventoriesWebSocketHandler.fetchAllInventories()); + } } diff --git a/spring-backend/src/main/resources/data.sql b/spring-backend/src/main/resources/data.sql index f93a8e4..17383fa 100644 --- a/spring-backend/src/main/resources/data.sql +++ b/spring-backend/src/main/resources/data.sql @@ -1 +1,7 @@ -INSERT INTO button (username) VALUES ('Testing'); \ No newline at end of file +INSERT INTO item_base (name, label) VALUES ('gold_ore', 'Golderz'); +INSERT INTO item_base (name, label) VALUES ('gold_coin', 'Goldmünze'); +INSERT INTO item_base (name, label) VALUES ('shortsword', 'Kurzschwert'); +INSERT INTO item_base (name, label) VALUES ('longsword', 'Langschwert'); +INSERT INTO item_base (name, label) VALUES ('shield', 'Schild'); +INSERT INTO item_base (name, label) VALUES ('diamond', 'Diamant'); +INSERT INTO item_base (name, label) VALUES ('health_potion', 'Lebenstrank'); \ No newline at end of file