|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- import {inject, injectable} from 'tsyringe'
- import * as sqlite from 'sqlite3'
- import {models} from '@tonality/library-common'
-
- @injectable()
- export class RingtoneRepository {
- private readonly database: sqlite.Database;
- constructor(
- @inject('DATABASE_LOCATION')
- DATABASE_LOCATION: string
- ) {
- this.database = new sqlite.Database(DATABASE_LOCATION)
- }
-
- async get(id: string): Promise<models.Ringtone> {
- return new Promise((resolve, reject) => {
- this.database.get(
- `
- SELECT *
- FROM ringtone
- WHERE id = ?;
- `,
- [id],
- (err, result) => {
- if (err) {
- reject(err)
- return
- }
- resolve(result)
- }
- )
- })
- }
-
- async browse(skip: number, take: number): Promise<models.Ringtone[]> {
- return new Promise((resolve, reject) => {
- this.database.all(
- `
- SELECT *
- FROM ringtone
- LIMIT ?
- OFFSET ?;
- `,
- [take, skip],
- (err, result) => {
- if (err) {
- reject(err)
- return
- }
-
- resolve(result)
- })
- })
- }
-
- async search(q: string): Promise<models.Ringtone[]> {
- return new Promise((resolve, reject) => {
- this.database.all(
- `
- SELECT *
- FROM ringtone r
- JOIN composer c ON r.composerId = c.id
- WHERE LOWER(r.name) LIKE ? ESCAPE '\';
- `,
- [`%${q.toLowerCase().replace('\\', '\\\\')}%`],
- (err, result) => {
- if (err) {
- reject(err)
- return
- }
- resolve(result)
- }
- )
- })
- }
-
- async create(data: Partial<models.Ringtone>): Promise<models.Ringtone> {
- return new Promise((resolve, reject) => {
-
- this.database.serialize(() => {
- this.database.run(
- `
- INSERT
- INTO ringtone
- VALUES (?, ?, ?, ?, ?, NULL, ?);
- `,
- [data.id, data.name, data.data, data.createdAt, data.updatedAt, data.composerId],
- (err) => {
- if (err) {
- reject(err)
- return
- }
- }
- )
- this.database.get(
- `
- SELECT *
- FROM ringtone
- WHERE id = ?;
- `,
- [data.id],
- (err, result) => {
- if (err) {
- reject(err)
- return
- }
- resolve(result)
- }
- )
- })
- })
- }
-
- async update(data: Partial<models.Ringtone>): Promise<models.Ringtone> {
- return new Promise((resolve, reject) => {
- this.database.serialize(() => {
- this.database.run(
- `
- UPDATE ringtone
- SET
- name = ?,
- data = ?,
- updatedAt = ?
- WHERE id = ?;
- `,
- [data.name, data.data, data.updatedAt, data.id],
- (err) => {
- if (err) {
- reject(err)
- return
- }
- }
- )
- this.database.get(
- `
- SELECT *
- FROM ringtone
- WHERE id = ?;
- `,
- [data.id],
- (err, result) => {
- if (err) {
- reject(err)
- return
- }
- console.log(result, data.id)
- resolve(result)
- }
- )
- })
- })
- }
-
- async softDelete(id: string, deletedAt: Date): Promise<models.Ringtone> {
- return new Promise((resolve, reject) => {
- this.database.serialize(() => {
- this.database.run(
- `
- UPDATE ringtone
- SET deletedAt = ?
- WHERE id = ?
- `,
- [deletedAt, id],
- (err) => {
- if (err) {
- reject(err)
- return
- }
- }
- )
- this.database.get(
- `
- SELECT *
- FROM ringtone
- WHERE id = ?;
- `,
- [id],
- (err, result) => {
- if (err) {
- reject(err)
- return
- }
- resolve(result)
- }
- )
- })
- })
- }
-
- async undoDelete(id: string): Promise<models.Ringtone> {
- return new Promise((resolve, reject) => {
- this.database.serialize(() => {
- this.database.run(
- `
- UPDATE ringtone
- SET deletedAt = NULL
- WHERE id = ?
- `,
- [id],
- (err) => {
- if (err) {
- reject(err)
- return
- }
- }
- )
- this.database.get(
- `
- SELECT *
- FROM ringtone
- WHERE id = ?;
- `,
- [id],
- (err, result) => {
- if (err) {
- reject(err)
- return
- }
- resolve(result)
- }
- )
- })
- })
- }
-
- async hardDelete(id: string): Promise<models.Ringtone> {
- return new Promise((resolve, reject) => {
- this.database.serialize(() => {
- this.database.get(
- `
- SELECT *
- FROM ringtone
- WHERE id = ?;
- `,
- [id],
- (err, result) => {
- if (err) {
- reject(err)
- return
- }
- resolve(result)
- }
- )
- this.database.run(
- `
- DELETE
- FROM ringtone
- WHERE id = ?
- `,
- [id],
- (err) => {
- if (err) {
- reject(err)
- return
- }
- }
- )
- })
- })
- }
- }
|