Skip to content

Class diagram

Lucy Ciara Herud-Thomassen edited this page Feb 26, 2026 · 4 revisions

Class-diagram

@startuml
' ===== HmH Klassediagram – oppgradert for IDATx1005 =====

abstract class User {
  - int userId
  - String role
  - String firstName
  - String lastName
  - String email
  - String passwordHash
  + getUserId() : int 
  + getStatus() : Boolean
  + getRole() : String
  + getFirstName() : String  
  + getLastName() : String
  + getEmail() : String
  + getPasswordHash() : String

  + validatePassword(password : String) : Boolean
}

class Customer {
  - DonationRepository donationLog
  - Hashmap<Integer orgNumber, Organization> preferredCauses

  + {inherited} super User
  + getPreferredCauses() : Hashmap<Integer orgNumber, Organization>
  + getDonationLog() : Hashmap<Timestamp, Donation>
  + makeDonation(organization : Organization, amount : BigDecimal, paymentMethod : String) : boolean
}

' ===== record class =====
class Organization {
    - int orgNumber
    - String name 
    - boolean trusted
    - String websiteURL
    - boolean isPreApproved
    - String description

    + Organization(orgNumber : int, name : String, trusted : boolean, websiteURL : String, isPreApproved : boolean, description : String)
    + getOrgNumber() : int
    + getName() : String
    + isTrusted() : boolean
    + getWebsiteURL() : String
    + isPreApproved() : boolean
    + getDescription() : String
}

class Donation { 
    -int donationId
    -int userId
    -int organizationId
    -BigDecimal amount
    -Timestamp date
    -String paymentMethod

    + Donation(userId : int, organizationId : int, amount : BigDecimal, date : Timestamp, paymentMethod : String)
    + getDonationId() : int
    + getUserId() : int
    + getOrganizationId() : int
    + getAmount() : BigDecimal
    + getDate() : Timestamp
    + getPaymentMethod() : String
}




' ===== Repository/DAO-lag =====
abstract class Repository {
  {abstract} # Object content
  {abstract} # Repository(content : Object)  ' Constructor
  {abstract} + getContent() : Object
}

class OrganizationRepository{
  - Hashmap<Integer orgNumber, Organization> content
  + OrganizationRepository(content : Hashmap<Integer orgNumber, Organization>)
  + getContent() : Hashmap<Integer orgNumber, Organization>
  + getTrustedOrganizations() : Hashmap<Integer orgNumber, Organization>
}


abstract class DBRepository {
  {abstract} # Hashmap<Object, Object> content
  {abstract} # DBRepository(content : Hashmap<Object, Object>)  ' Constructor
  {abstract} + getContent() : Hashmap<Object, Object> 
  {abstract} + add(input: Object) : boolean
}

class UserRepository {
  - Hashmap<String email, User> content
  + UserRepository(content : Hashmap<String email, User>)
  + add(user : User) : boolean
  + login(email : String, password : char[]) : boolean
  + logout() : void
}

class DonationRepository {
  - Hashmap<Integer donationId, Donation> content
  + DonationRepository(content : Hashmap<Integer donationId, Donation>)
  + sortByDate() : Hashmap<Integer donationId, Donation> 
  + sortByAmount() : Hashmap<Integer donationId, Donation>
  + filterByOrganization(orgNumber : int) : Hashmap<Integer donationId, Donation>
  + add(donation : Donation) : boolean
}


' ===== Wrapper =====
abstract class Wrapper {
  {abstract} + import() : Object
}

class OrganizationAPIWrapper {
  - String apiEndpoint
  + OrganizationAPIWrapper(String apiEndpoint)
  + import() : Hashmap<orgNumber int, Donation>
  + export(Hashmap<orgNumber int, Donation>) : Boolean
}

abstract class DBWrapper {
  - String PATH
  # DBWrapper(String path)
  {abstract} + import() : Hashmap<Object, Object> 
  {abstract} + export(Hashmap<Object, Object> entity) : Boolean
}

class UserDBWrapper {
  + UserDBWrapper(String path)
  + import() : Hashmap<String email, User>
  + export(Hashmap<String email, User>) : Boolean
}

class DonationDBWrapper {
  + DonationDBWrapper(String path)
  + import() : Hashmap<orgNumber int, Donation>
  + export(Hashmap<orgNumber int, Donation>) : Boolean
}



' ===== Relationships =====
User  <|--  Customer : inherits

OrganizationRepository  o-- Organization : aggregation

UserRepository -- UserDBWrapper
DonationRepository -- DonationDBWrapper
OrganizationRepository -- OrganizationAPIWrapper
Donation *-- DonationRepository

Wrapper <|-- DBWrapper
Wrapper <|-- OrganizationAPIWrapper
DBWrapper <|-- UserDBWrapper
DBWrapper <|-- DonationDBWrapper

Repository <|-- DBRepository
DBRepository <|-- UserRepository
DBRepository <|-- DonationRepository
Repository <|-- OrganizationRepository
User o-- UserRepository : contains
Customer --o DonationRepository : contains

@enduml