All files / src/storage/schema/entities TxLabel.ts

85% Statements 34/40
70% Branches 7/10
100% Functions 22/22
85% Lines 34/40

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83    57x 57x   57x   115x 115x                           3x 127x 4x 1x 47x 1x 3x 1x 7x 64x 3x 1x   107x 1x 1x 1x     2x 2x       1x 1x           1x         105x 105x               63x 63x 63x       43x 43x           43x    
/* eslint-disable @typescript-eslint/no-unused-vars */
import { MerklePath } from "@bsv/sdk"
import { arraysEqual, entity, sdk, table, verifyId, verifyOneOrNone } from "../../../index.client";
import { EntityBase } from ".";
 
export class TxLabel extends EntityBase<table.TxLabel> {
    constructor(api?: table.TxLabel) {
        const now = new Date()
        super(api || {
            txLabelId: 0,
            created_at: now,
            updated_at: now,
            label: "",
            userId: 0,
            isDeleted: false
        })
    }
 
    override updateApi(): void {
        /* nothing needed yet... */
    }
 
    get txLabelId() { return this.api.txLabelId }
    set txLabelId(v: number) { this.api.txLabelId = v }
    get created_at() { return this.api.created_at }
    set created_at(v: Date) { this.api.created_at = v }
    get updated_at() { return this.api.updated_at }
    set updated_at(v: Date) { this.api.updated_at = v }
    get label() { return this.api.label }
    set label(v: string) { this.api.label = v }
    get userId() { return this.api.userId }
    set userId(v: number) { this.api.userId = v }
    get isDeleted() { return this.api.isDeleted }
    set isDeleted(v: boolean) { this.api.isDeleted = v }
 
    override get id(): number { return this.api.txLabelId }
    override set id(v: number) { this.api.txLabelId = v}
    override get entityName(): string { return 'entity.TxLabel' }
    override get entityTable(): string { return 'tx_labels' }
    
    override equals(ei: table.TxLabel, syncMap?: entity.SyncMap): boolean {
        const eo = this.toApi()
        if (
            eo.label != ei.label ||
            eo.isDeleted != ei.isDeleted
            )
            return false
        Iif (!syncMap) {
            Iif (
                eo.userId !== ei.userId
                )
                return false
        }
        return true
    }
 
    static async mergeFind(storage: entity.EntityStorage, userId: number, ei: table.TxLabel, syncMap: entity.SyncMap, trx?: sdk.TrxToken)
    : Promise<{ found: boolean, eo: entity.TxLabel, eiId: number }> {
        const ef = verifyOneOrNone(await storage.findTxLabels({ partial: { label: ei.label, userId }, trx }))
        return {
            found: !!ef,
            eo: new entity.TxLabel(ef || { ...ei }),
            eiId: verifyId(ei.txLabelId)
        }
    }
 
    override async mergeNew(storage: entity.EntityStorage, userId: number, syncMap: entity.SyncMap, trx?: sdk.TrxToken): Promise<void> {
        this.userId = userId
        this.txLabelId = 0
        this.txLabelId = await storage.insertTxLabel(this.toApi(), trx)
    }
 
    override async mergeExisting(storage: entity.EntityStorage, since: Date | undefined, ei: table.TxLabel, syncMap: entity.SyncMap, trx?: sdk.TrxToken): Promise<boolean> {
        let wasMerged = false
        Iif (ei.updated_at > this.updated_at) {
            this.isDeleted = ei.isDeleted
            this.updated_at = new Date()
            await storage.updateTxLabel(this.id, this.toApi(), trx)
            wasMerged = true
        }
        return wasMerged
    }
}