UML Diagrams

Class Diagram

        classDiagram
    class Wrapper {
        -Int number_of_days
        +initialize(number_of_days)
        +run()
    }

    class HathiTrustItem{
        -String htid
        +initialize(htid)
        +barcode()
    }
    class AlmaItem{
        -String raw_data
        -String htid
        +.for(barcode,htid)
        +initialize(raw_data)
        +has_no_barcode()
        +item_call_num_htid_mismatch()
        +has_matching_htid_in_item_call_num()
        +body_for_update()
    }

    class EmptyAlmaItem
    

    AlmaItem <|-- EmptyAlmaItem
    
    Wrapper -- AlmaClient
    Wrapper -- AlmaItem
    AlmaItem -- AlmaClient
    Wrapper -- Report
    Wrapper -- HathiTrustItem
    
    
    class AlmaClient{
        +get_item()
        +update_item()
    }

    class Report{
        -Dict counters
        +initialize(list_of_counters)
        +update_report(kind, message)
    }
    

Sequence Diagram

        sequenceDiagram
    Participant W as Wrapper
    Participant AlmaItem as alma_item:AlmaItem
    Participant AlmaClient as alma_client:AlmaClient
    Participant HTItem as ht_item:HTItem
    Participant HF as HathiFiles DB
    Participant Report as report:Report

    W->>HF: get_updated_items()
    HF-->>W: [list] rows from db
    loop Over list of rows
        W->>HTItem: new(row)
        HTItem-->>W: [HTItem] ht_item 

        W->>AlmaItem: new(ht_item.barcode)
        AlmaItem->>AlmaClient: get(barcode)
        alt Alma has barcode
            AlmaClient-->>AlmaItem: [JSON] response body
            AlmaItem-->>W: [AlmaItem] alma_item
        else Alma does not have barcode
             AlmaClient-->>AlmaItem: No barcode
             AlmaItem-->>W: [EmptyAlmaItem] alma_item
        end
        W->>AlmaItem: alma_item.has_no_barcode()
        alt no barcode
            AlmaItem-->>W: true
            W->>Report: no barcode
        else has barcode
            AlmaItem-->>W: false
        end
        W->>AlmaItem: has_matching_htid_in_item_call_num()
        alt there is a match in the item call number
            AlmaItem-->>W: true
            W->>Report: skip (go to next item in the loop)
        else
            AlmaItem-->>W: false
        end
        W->>AlmaItem: alma_item.item_call_number_mismatch()
        alt there is a mismatch 
            AlmaItem-->>W: true
            W->>Report: mismatch
        else
            AlmaItem-->>W: false
        end
        W->>AlmaClient: update(alma_item.barcode, alma_item.update_body)
        alt successful update
            AlmaClient-->>W: success
            W->>Report: successful_update
        else unsuccessful update
            AlmaClient-->>W: error
            W->>Report: unsuccessful update
        end
    end