From 49aeb2a3c9b9b643aeffb46bf896ab2279999912 Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Thu, 19 Feb 2026 09:50:20 +0100 Subject: [PATCH] models based on current class diagram --- .../team6/models/AnonymousDonation.java | 4 + .../sytemutvikling/team6/models/Charity.java | 2 +- .../team6/models/CharityRegistry.java | 0 .../team6/models/DonationRegistry.java | 5 + .../team6/models/{Role.java => Inbox.java} | 3 +- .../sytemutvikling/team6/models/Message.java | 0 .../team6/models/PublicDonation.java | 5 + .../sytemutvikling/team6/models/Settings.java | 5 + .../team6/models/UserRegistry.java | 5 + .../src/main/resources/tempClassDiagram.puml | 307 ++++++++++++++++++ .../team6/models/AnonymousDonation.class | Bin 0 -> 367 bytes .../sytemutvikling/team6/models/Charity.class | Bin 0 -> 312 bytes .../team6/models/Donation.class | Bin 0 -> 315 bytes .../team6/models/DonationRegistry.class | Bin 0 -> 339 bytes .../team6/models/Feedback.class | Bin 0 -> 315 bytes .../sytemutvikling/team6/models/Inbox.class | Bin 0 -> 306 bytes .../team6/models/PublicDonation.class | Bin 0 -> 358 bytes .../team6/models/Settings.class | Bin 0 -> 315 bytes .../sytemutvikling/team6/models/User.class | Bin 0 -> 303 bytes .../team6/models/UserRegistry.class | Bin 0 -> 327 bytes .../team6/service/AuthenticationService.class | Bin 0 -> 356 bytes .../team6/service/CharityService.class | Bin 0 -> 335 bytes .../team6/service/DonationService.class | Bin 0 -> 338 bytes .../team6/service/FeedbackService.class | Bin 0 -> 338 bytes .../target/classes/tempClassDiagram.puml | 307 ++++++++++++++++++ 25 files changed, 641 insertions(+), 2 deletions(-) create mode 100644 helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/AnonymousDonation.java create mode 100644 helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/CharityRegistry.java create mode 100644 helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/DonationRegistry.java rename helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/{Role.java => Inbox.java} (63%) create mode 100644 helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/Message.java create mode 100644 helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/PublicDonation.java create mode 100644 helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/Settings.java create mode 100644 helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/UserRegistry.java create mode 100644 helpmehelpapplication/src/main/resources/tempClassDiagram.puml create mode 100644 helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/models/AnonymousDonation.class create mode 100644 helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/models/Charity.class create mode 100644 helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/models/Donation.class create mode 100644 helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/models/DonationRegistry.class create mode 100644 helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/models/Feedback.class create mode 100644 helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/models/Inbox.class create mode 100644 helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/models/PublicDonation.class create mode 100644 helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/models/Settings.class create mode 100644 helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/models/User.class create mode 100644 helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/models/UserRegistry.class create mode 100644 helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/service/AuthenticationService.class create mode 100644 helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/service/CharityService.class create mode 100644 helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/service/DonationService.class create mode 100644 helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/service/FeedbackService.class create mode 100644 helpmehelpapplication/target/classes/tempClassDiagram.puml diff --git a/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/AnonymousDonation.java b/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/AnonymousDonation.java new file mode 100644 index 0000000..6f991e9 --- /dev/null +++ b/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/AnonymousDonation.java @@ -0,0 +1,4 @@ +package ntnu.sytemutvikling.team6.models; + +public class AnonymousDonation extends Donation { +} diff --git a/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/Charity.java b/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/Charity.java index 47c8056..92ebbf1 100644 --- a/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/Charity.java +++ b/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/Charity.java @@ -1,4 +1,4 @@ package ntnu.sytemutvikling.team6.models; -public class Charity { +abstract class Charity { } diff --git a/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/CharityRegistry.java b/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/CharityRegistry.java new file mode 100644 index 0000000..e69de29 diff --git a/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/DonationRegistry.java b/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/DonationRegistry.java new file mode 100644 index 0000000..f565298 --- /dev/null +++ b/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/DonationRegistry.java @@ -0,0 +1,5 @@ +package ntnu.sytemutvikling.team6.models; + +public class DonationRegistry { + +} diff --git a/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/Role.java b/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/Inbox.java similarity index 63% rename from helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/Role.java rename to helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/Inbox.java index db49013..75fed79 100644 --- a/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/Role.java +++ b/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/Inbox.java @@ -1,4 +1,5 @@ package ntnu.sytemutvikling.team6.models; -public class Role { +public class Inbox { + } diff --git a/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/Message.java b/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/Message.java new file mode 100644 index 0000000..e69de29 diff --git a/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/PublicDonation.java b/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/PublicDonation.java new file mode 100644 index 0000000..7da3000 --- /dev/null +++ b/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/PublicDonation.java @@ -0,0 +1,5 @@ +package ntnu.sytemutvikling.team6.models; + +public class PublicDonation extends Donation { + +} diff --git a/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/Settings.java b/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/Settings.java new file mode 100644 index 0000000..71e218a --- /dev/null +++ b/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/Settings.java @@ -0,0 +1,5 @@ +package ntnu.sytemutvikling.team6.models; + +public class Settings { + +} diff --git a/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/UserRegistry.java b/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/UserRegistry.java new file mode 100644 index 0000000..da4ce2b --- /dev/null +++ b/helpmehelpapplication/src/main/java/ntnu/sytemutvikling/team6/models/UserRegistry.java @@ -0,0 +1,5 @@ +package ntnu.sytemutvikling.team6.models; + +public class UserRegistry { + +} diff --git a/helpmehelpapplication/src/main/resources/tempClassDiagram.puml b/helpmehelpapplication/src/main/resources/tempClassDiagram.puml new file mode 100644 index 0000000..c32ad2a --- /dev/null +++ b/helpmehelpapplication/src/main/resources/tempClassDiagram.puml @@ -0,0 +1,307 @@ +@startuml + + + +' ========================= + +' DOMAIN LAYER + +' ========================= + + + +package "Domain Layer" { + + + +class User { + + - idNext : static int + + - id : int + + - name : String + + - email : String + + - passwordHash : String + + - role : String + + - settings : Settings + + - inbox : Inbox + + + + + getUserId() : int + + + setUserId(id : int) + + + getUserName() : String + + + setUserName(name : String) + + + getUserEmail() : String + + + setUserEmail(email : String) + + + getUserPasswordHash() : String + + + setUserPasswordHash(passwordHash : String) + + + getUserRole() : String + + + setUserRole(role : String) + +} + + + +class Settings { + + - lightmode : boolean + + - language : String + + - anonymous : boolean + + + + + getSettings() : String + +} + + + +class Inbox { + + - messages : ArrayList + + + + + getMessages() : ArrayList + + + addMessage(message : Message) + + + removeMessage(message : Message) + +} + + + +class Message { + + - title : String + + - from : Charity + + - date : LocalDateTime + + + + + getTitle() : String + + + getFrom() : Charity + + + getDate() : LocalDateTime + +} + + + +class Charity { + + - idNext : static int + + - id : int + + - name : String + + - description : String + + - totalDonations : double + + - verified : boolean + + - category : String + + + + + getCharityId() : int + + + setCharityId(id : int) + + + getCharityName() : String + + + setCharityName(name : String) + + + getCharityDescription() : String + + + setCharityDescription(description : String) + + + getCharityTotalDonations() : double + + + setCharityTotalDonations(totalDonations : double) + +} + + + +abstract class Donation { + + - idNext : static int + + - id : int + + - amount : double + + - date : LocalDateTime + + - charity : Charity + + - user : User + + + + + getDonationId() : int + + + setDonationId(id : int) + + + getDonationAmount() : double + + + setDonationAmount(amount : double) + + + getDonationDate() : LocalDateTime + + + setDonationDate(date : LocalDateTime) + + + getDonorInfo() : String + +} + + + +class AnonymousDonation { + + - comment : String + +} + + + +class PublicDonation { + + - comment : String + +} + + + +class Feedback { + + - id : int + + - message : String + + - date : LocalDateTime + + - charityId : int + + + + + getId() : int + + + setId(id : int) + + + getMessage() : String + + + setMessage(message : String) + + + getDate() : LocalDateTime + + + setDate(date : LocalDateTime) + +} + + + +class UserRegistry { + + - users : List + + + addUser(user : User) + + + removeUser(user : User) + + + getUserById(id : int) : User + + + getAllUsers() : List + +} + + + +class CharityRegistry { + + - charities : List + + + addCharity(charity : Charity) + + + removeCharity(charity : Charity) + + + getCharityById(id : int) : Charity + + + getAllCharities() : List + +} + + + +class DonationRegistry { + + - donations : List + + + addDonation(donation : Donation) + + + removeDonation(donation : Donation) + + + getDonationById(id : int) : Donation + + + getAllDonations() : List + +} + + + +' Associations + +User "1" -- "0..*" Donation + +Charity "1" -- "0..*" Donation + + + +User "1" -- "0..*" Feedback + +Charity "1" -- "0..*" Feedback + + + +Donation <|-- AnonymousDonation + +Donation <|-- PublicDonation + + + +User "1" *-- "1" Settings + +User "1" *-- "1" Inbox + +Inbox "1" -- "0..*" Message + +Message "1" --> "1" Charity + + + +} \ No newline at end of file diff --git a/helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/models/AnonymousDonation.class b/helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/models/AnonymousDonation.class new file mode 100644 index 0000000000000000000000000000000000000000..5d26bc1d8b01c05275fd049fc8e732e1d13bb2ea GIT binary patch literal 367 zcmah_u};H441G?MhK52>2X?lWfs?9=1%!lvP7w>J`?Z|lAm@{kyGs2mCL{(vfR92r z6-*tvJp0*x_LIMVKED9m;V4H!m~h~znsqQPhLwG*EI+GYv^!VMKbfjg*X()id~9w# z>tH?SND1Sey8m%P_tLTrSA@=JJSU_#vbaD8y*@H@34_wIxsPsP>PNk(3}IOMrLN|> zwk`iFrs2glglW0+^p@odLh;~Zy)-l1?mym|ID6GAjT4AT`3@vfYfdm1rZybNPCu~s aE`b;@5JmqO2ZQ4P;slgH!FDu>(jcg;P$Z&Xn-wgq*OI+P;#jF7rN{wtsEFCX z0cif;`8zXu^ZWPx17L|kgn%%%&NiYxJ5@C9q>o11op4GPb5WFAWooh5%SyX*gpe>e z$deRCa?d(DsN50SFWPGNN@$HI8$!6?sTeJE6Fi_z=%?DMx2DKc^&vB(2*b3@rP=US zU*E#e?R8CsdBZ_ers~$oO#4>1P08?4bZ;;-B(C` literal 0 HcmV?d00001 diff --git a/helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/models/Donation.class b/helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/models/Donation.class new file mode 100644 index 0000000000000000000000000000000000000000..17aeae8da0e0328d150d31ab701f3434f89291ce GIT binary patch literal 315 zcma)%Jx;?w5QX13b{tGXB5pvJfW&q*AQ}=X3kp#BwOPT0^{!;EBXKM$B#In>Lm_4( z=xN@}n?HT?_5Ha6u)-`yLRh%qdeyxJ)AV7>ua@1j3Pv{mKu64`N z{}$8m!X4qP{5Q}gp?L6pTbo;sXD5H8=MfSo5G45&5-FmH=Hk@e1KH^ZM(9Ah TWZ_VByw5X<6LEwi(FD^UFa}As literal 0 HcmV?d00001 diff --git a/helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/models/DonationRegistry.class b/helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/models/DonationRegistry.class new file mode 100644 index 0000000000000000000000000000000000000000..3974903d9496aace76d6a75118cc0b88e270b82e GIT binary patch literal 339 zcmb7=&q~8U5XQerlSX5;MeqT^Z5nf4wD=S;mifst8Nuc(}yL$S$1<3jBYMe<6n&J)U9_quy>DU z&Ru9%Ia0!8p_f`&EyEAh!qkB-p@_2t z?p(f^Z~o;sf4iSw052G)hzJwsU8mYl&sFEQW@C+eSDtnCpsISswpBCcRiVpGikL87 z>#bH+%h0@7bLk2FC*zENCiHG5OF}%AwG2I+50Icw80E(CYgZNAyy?O+;VQ37ZI`++ z!5@mT|1d4#E}#@Uw?B4nbW U4OzGl9qjW&;!qsnQZ&NoAIj265dZ)H literal 0 HcmV?d00001 diff --git a/helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/models/Inbox.class b/helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/models/Inbox.class new file mode 100644 index 0000000000000000000000000000000000000000..7b4a30611879cd3c018533f5a84546ad7e661ab6 GIT binary patch literal 306 zcma)%Jx;?w5QX13{z;6%5jRK^1q!yK0ns3kB3V!nrC&QM*sxwp_S%ADQ6W)q01kzi zwQ>NOH}mFC-~9Z3eFM0|JV8KMT4#IFy*pL+ZqTnr+h^gFtS?2~?3C%m+Lp~*f{-xZ z%RvewdE&9$tI84LYi+f=Axu_hTS9otJ1HiZWrz?H@KN_OThHkD}?y0V6FSo&JqrEa>pYXVCycN!m|*e?r2<r3-vNG!=J`w(?9kD%;xnmF-;g zzhNpbt|y$8{|34w6w7w#YQA%E?evfIJVN3ailmo9D@7F5T%Fl@AUplQ-n#|~3f0(# T4jiaXcJEB$=FOkJ`T70&25^gMiimLTyz5l^?z!sx-n?1kUX*8DEmc)Nvu)K=%T0=yFx~0B zR#wZvL$Tx16Z&i8jK3!IF6Uc9d?PCvdKe6mpih|O#_@eu72G`P!ZKl&*QK^w-I(D2 zi?M$-E#V?R3T8#fHg(sOd}qSRK_I*ea5#gY$aj!P0YNksrw$%S7N0ozkV1q^G_)ZL Sr=r6{o=6;tBaB5OO#T1?phVLE literal 0 HcmV?d00001 diff --git a/helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/models/UserRegistry.class b/helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/models/UserRegistry.class new file mode 100644 index 0000000000000000000000000000000000000000..970aced91dfd7f8c243d76c46fae27be61d4a66b GIT binary patch literal 327 zcmb7*`0ZcK;kr2*pu)Xq|z-=Ga=Cv_)sRHZvQnlSPH(ot?c5_}DAKWHK zN|>zlTB}CO;H+A49SFl~V@TpG*weOs}6)K$ZTqq3`Y zv(U~&|65GMi}3_i{tN1gP&{h~ptY_MvI@B~YdzrDCeetTm7v dy?**VfrqHCxAJ>pJsR82hRm>+)7LTz4jCHCyZ2xb5;6 zV}yk9Mt52jTHY?Q4d;%~zc<#n2SRUpu_A=C>V*^Za6CYSK4Fv^%k#F(xPI1I!GyE4 z%5|}l<(~hVpE?|JqmH7!!z}{2o%tdr8JZYR^D)`GKQ% ZX#_|l{WWCZL~^h{M^aCP2t&yLqaS1GQQrUn literal 0 HcmV?d00001 diff --git a/helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/service/DonationService.class b/helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/service/DonationService.class new file mode 100644 index 0000000000000000000000000000000000000000..86d299609fbed9ef28c2c620209ae857df2bd9fb GIT binary patch literal 338 zcmb7=u};G<5QhItlLkVe72*ZhfB_33v4B_#Oc4x4-JNiPD~Tf|P9z?S35kIR;Gq!b z!o0Uh7y&vSc68C64+xpCO+zwK*xoVvC(zwMB zr-%u&l^v|9tX{q=R$O|*_(GicOTy^ja7l>g%>!o`VRM26W5P5S$G3f5aC>iyiV3@U zQ`%~2TM7KzjQx{zgwy=rV&{Zx(e!P}HxjsY-vu`=S1ta5@AO(!t@){rBfOJ literal 0 HcmV?d00001 diff --git a/helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/service/FeedbackService.class b/helpmehelpapplication/target/classes/ntnu/sytemutvikling/team6/service/FeedbackService.class new file mode 100644 index 0000000000000000000000000000000000000000..4b0e587b06036d7a35cd6fe07ab42099bb8a5b7d GIT binary patch literal 338 zcmb7=u};G<5QhItlLkVeRmBUi0Rt97Vga#Kbc*Ou)ZKAU;5Koj#EHaXF(EPV06Y}p zT$tEc{_}TdTc7Up>-_`3Jtiq4!lm=BQ|*iAs`I_wmexHf&$_x+EjPV2tme$?LYwXK zhf~Ca$wv2Dm0B(@iVYi27~WcE{T*R&dbT3OvwF=L2G}1V!H_V{t>cHTD!6&nMahI| zUK?GmbYlbmHe>&6Tf$ZTZ?PLfwye9x@Z5&)kN=2Y1ZSK;3}pe3O2JGr6;e9}lJht0 by-FiOCK<+%2M3a)-8qqZC`34tj4=KNWkXVR literal 0 HcmV?d00001 diff --git a/helpmehelpapplication/target/classes/tempClassDiagram.puml b/helpmehelpapplication/target/classes/tempClassDiagram.puml new file mode 100644 index 0000000..c32ad2a --- /dev/null +++ b/helpmehelpapplication/target/classes/tempClassDiagram.puml @@ -0,0 +1,307 @@ +@startuml + + + +' ========================= + +' DOMAIN LAYER + +' ========================= + + + +package "Domain Layer" { + + + +class User { + + - idNext : static int + + - id : int + + - name : String + + - email : String + + - passwordHash : String + + - role : String + + - settings : Settings + + - inbox : Inbox + + + + + getUserId() : int + + + setUserId(id : int) + + + getUserName() : String + + + setUserName(name : String) + + + getUserEmail() : String + + + setUserEmail(email : String) + + + getUserPasswordHash() : String + + + setUserPasswordHash(passwordHash : String) + + + getUserRole() : String + + + setUserRole(role : String) + +} + + + +class Settings { + + - lightmode : boolean + + - language : String + + - anonymous : boolean + + + + + getSettings() : String + +} + + + +class Inbox { + + - messages : ArrayList + + + + + getMessages() : ArrayList + + + addMessage(message : Message) + + + removeMessage(message : Message) + +} + + + +class Message { + + - title : String + + - from : Charity + + - date : LocalDateTime + + + + + getTitle() : String + + + getFrom() : Charity + + + getDate() : LocalDateTime + +} + + + +class Charity { + + - idNext : static int + + - id : int + + - name : String + + - description : String + + - totalDonations : double + + - verified : boolean + + - category : String + + + + + getCharityId() : int + + + setCharityId(id : int) + + + getCharityName() : String + + + setCharityName(name : String) + + + getCharityDescription() : String + + + setCharityDescription(description : String) + + + getCharityTotalDonations() : double + + + setCharityTotalDonations(totalDonations : double) + +} + + + +abstract class Donation { + + - idNext : static int + + - id : int + + - amount : double + + - date : LocalDateTime + + - charity : Charity + + - user : User + + + + + getDonationId() : int + + + setDonationId(id : int) + + + getDonationAmount() : double + + + setDonationAmount(amount : double) + + + getDonationDate() : LocalDateTime + + + setDonationDate(date : LocalDateTime) + + + getDonorInfo() : String + +} + + + +class AnonymousDonation { + + - comment : String + +} + + + +class PublicDonation { + + - comment : String + +} + + + +class Feedback { + + - id : int + + - message : String + + - date : LocalDateTime + + - charityId : int + + + + + getId() : int + + + setId(id : int) + + + getMessage() : String + + + setMessage(message : String) + + + getDate() : LocalDateTime + + + setDate(date : LocalDateTime) + +} + + + +class UserRegistry { + + - users : List + + + addUser(user : User) + + + removeUser(user : User) + + + getUserById(id : int) : User + + + getAllUsers() : List + +} + + + +class CharityRegistry { + + - charities : List + + + addCharity(charity : Charity) + + + removeCharity(charity : Charity) + + + getCharityById(id : int) : Charity + + + getAllCharities() : List + +} + + + +class DonationRegistry { + + - donations : List + + + addDonation(donation : Donation) + + + removeDonation(donation : Donation) + + + getDonationById(id : int) : Donation + + + getAllDonations() : List + +} + + + +' Associations + +User "1" -- "0..*" Donation + +Charity "1" -- "0..*" Donation + + + +User "1" -- "0..*" Feedback + +Charity "1" -- "0..*" Feedback + + + +Donation <|-- AnonymousDonation + +Donation <|-- PublicDonation + + + +User "1" *-- "1" Settings + +User "1" *-- "1" Inbox + +Inbox "1" -- "0..*" Message + +Message "1" --> "1" Charity + + + +} \ No newline at end of file