@startuml model
namespace com.example.ezvault.model {
    class User {
        - uid: String
        - userName: String
        
        + getUid(): String
        + getUserName(): String
        + <<Create>> User(uid: String, userName: String)
    }

    class ItemList {
        -tags: ArrayList<Tag>
        -items: ArrayList<Items>

        +getTags(): ArrayList<Tag>
        +getItems(): ArrayList<Item>
        + getTotalValue(): double

        + <<Create>> ItemList(tags: ArrayList<Tag>, items: ArrayList<Item>)
    }


    class Item {
        - id : String
        - make : String
        - model : String
        - count : double
        - value : double
        - date : Timestamp
        - tags: ArrayList<Tag>
        - images: ArrayList<Image>
        - description
        + getTotalVaString
        + getCount() : double
        + getValue() : double
        + getDate() : Timestamp
        + getTags() : ArrayList<Tag>
        + getImages(): ArrayList<Image>
        + getDescription(): String
        + getComment(): String
        + getSerialNumber(): String

    }

    class Image {
        
    }


    class Tag {
        - identifier: String
        
        + getIdentifier(): String
        + <<Create>> Tag(identifier: String)
    }

    class ItemBuilder {
        - id : String
        - make : String
        - model : String
        - count : double
        - value : double
        - date : Timestamp
        - tags: ArrayList<Tag>
        - images: ArrayList<Image>
        - description: String
        - comment: String
        - serialNumber: String
        
        
        + setMake(make: String)
        + setModel(model: String)
        + setId(id: string)
        + setCount(count: double)
        + setValue(value: double)
        + setDate(date: Timestamp)
        + setTags(tags: ArrayList<Tag>)
        + setImages(images: ArrayList<Image>)
        + setDescription(description: String)
        + setComment(comment: String)
        + setSerialNumber(serialNumber: String)
        + builld(): Item
        + <<Create>> ItemBuilder()
    }

    ItemList --() List : implements

    ItemBuilder ..> Item : creates >

    ItemList "1" -- "0..*" Item : contains >

    Item "1" -- "0..*" Tag : tagged with >

    ItemList "1" -- "0..*" Tag : \nhas >

    Item "1" -- "0..*" Image : has >

    User "1" -- "1" ItemList : has >
}
@enduml
