IdentifiableSqlitePersistence<T extends IIdentifiable<K>, K>

Abstract persistence component that stores data in SQLite and implements a number of CRUD operations over data items with unique ids.

Extends: SqlitePersistence

Implements: IWriter<T, K>, IGetter<T, K>, ISetter

Description

The abstract persistence component serves as a tool for storing data in SQLite databases and offers a range of essential CRUD operations, allowing easy creation, retrieval, updating, and deletion of data items identified by unique IDs. With this component, developers can efficiently manage and interact with data, making database operations straightforward and reliable for various applications. Important points

  • The data items must implement the IIdentifiable interface.
  • In basic scenarios, child classes shall only override getPageByFilter, getListByFilter or deleteByFilter operations with a specific filter function.
  • All other operations can be used out of the box.
  • In complex scenarios child classes can implement additional operations by accessing this._collection and this._model properties.

Configuration parameters

  • table: (optional) SQLite table name
  • schema: (optional) SQLite schema name
  • connection(s):
    • discovery_key: (optional) key to retrieve the connection from IDiscovery
    • database: database file path
    • uri: resource URI with file:// protocol

References

  • *:logger:*:*:1.0 - (optional) ILogger components to pass log messages
  • *:discovery:*:*:1.0 - (optional) IDiscovery services
  • *:credential-store:*:*:1.0 - (optional) Credential stores to resolve credentials (ICredentialStore)

Constructors

Creates a new instance of the persistence component.

public constructor(tableName: string)

  • tableName: string - (optional) collection name.

Fields

Flag to turn on automated string ID generation

protected _autoGenerateId: boolean = true

Instance methods

convertFromPublicPartial

Converts the given object from the public partial format.

protected convertFromPublicPartial(value: any): any

  • value: any - object to convert from the public partial format.
  • returns: any - initial object.

create

Creates a data item.

public create(context: IContext, item: T): Promise<T>

  • context: IContext - (optional) a context to trace execution through a call chain.
  • item: T - item to be created.
  • returns: Promise<T> - created item

deleteById

Deletes a data item by it’s unique id.

public deleteById(context: IContext, id: K): Promise<T>

  • context: IContext - (optional) a context to trace execution through a call chain.
  • id: K - id of the item to be deleted
  • returns: Promise<T> - deleted item

deleteByIds

Deletes multiple data items by their unique ids.

public deleteByIds(context: IContext, ids: K[]): Promise<void>

  • context: IContext - (optional) a context to trace execution through a call chain.
  • ids: K[] - ids of the data items to be deleted.

getListByIds

Gets a list of data items retrieved by given unique ids.

public getListByIds(context: IContext, ids: K[]): Promise<T[]>

  • context: IContext - (optional) a context to trace execution through a call chain.
  • ids: K[] - ids of the data items to be retrieved
  • returns: Promise<T[]> - data list

getOneById

Gets a data item by its unique id.

public getOneById(context: IContext, id: K): Promise<T>

  • context: IContext - (optional) a context to trace execution through a call chain.
  • id: K - id of the data item to be retrieved.
  • returns: Promise<T> - data item

set

Sets a data item. If the data item exists, it updates it. Otherwise, it creates a new data item.

public set(context: IContext, item: T): Promise<T>

  • context: IContext - (optional) a context to trace execution through a call chain.
  • item: T - item to be set.
  • returns: Promise<T> - new or updated item

update

Updates a data item.

public update(context: IContext, item: T): Promise<T>

  • context: IContext - (optional) a context to trace execution through a call chain.
  • item: T - item to be updated.
  • returns: Promise<T> - updated item

updatePartially

Updates only a few selected fields in a data item.

public updatePartially(context: IContext, id: K, data: AnyValueMap): Promise<T>

  • context: IContext - (optional) a context to trace execution through a call chain.
  • id: any - id of data item to be updated.
  • data: AnyValueMap - map with fields to be updated.
  • returns: Promise<T> - updated item

Examples

class MySqlitePersistence extends IdentifiableSqlitePersistence<MyData, string> {
    public constructor() {
        super("mydata");
    }
    
    protected defineSchema(): void {
        this.clearSchema();
        this.ensureSchema('CREATE TABLE "' + this._tableName + '" ("id" VARCHAR(32) PRIMARY KEY, "name" VARCHAR(50), "content" TEXT)');
        this.ensureIndex(this._tableName + '_name', { name: 1 }, { unique: true });
    }
    
    private composeFilter(filter: FilterParams): any {
        filter = filter || new FilterParams();
        let name = filter.getAsNullableString('name');

        let filterCondition: string = null;
        if (name != null)
            filterCondition = "\"name\"='" + name + "'";
        return filterCondition;
    }
    
    public getPageByFilter(context: IContext, filter: FilterParams,
        paging: PagingParams): Promise<DataPage<MyData>> {
        return super.getPageByFilter(context, this.composeFilter(filter), paging, null, null);
    }
}

let persistence = new MySqlitePersistence();
persistence.configure(ConfigParams.fromTuples(
    "connection.database", "./data/mydb.db"
));

await persitence.open("123");
let item = await = persistence.create("123", { id: "1", name: "ABC" });
let page = await persistence.getPageByFilter(
    "123",
    FilterParams.fromTuples("name", "ABC"),
    null
);

console.log(page.data);          // Result: { id: "1", name: "ABC" }
await persistence.deleteById("123", "1");