feat: partner sync (#16424)

feat: partner CUD sync
This commit is contained in:
Zack Pollard
2025-03-03 11:05:30 +00:00
committed by GitHub
parent 869839f642
commit fe702ba6d7
19 changed files with 614 additions and 8 deletions

View File

@@ -1,11 +1,12 @@
import { Insertable, Kysely } from 'kysely';
import { randomBytes, randomUUID } from 'node:crypto';
import { Writable } from 'node:stream';
import { Assets, DB, Sessions, Users } from 'src/db';
import { Assets, DB, Partners, Sessions, Users } from 'src/db';
import { AuthDto } from 'src/dtos/auth.dto';
import { AssetType } from 'src/enum';
import { AlbumRepository } from 'src/repositories/album.repository';
import { AssetRepository } from 'src/repositories/asset.repository';
import { PartnerRepository } from 'src/repositories/partner.repository';
import { SessionRepository } from 'src/repositories/session.repository';
import { SyncRepository } from 'src/repositories/sync.repository';
import { UserRepository } from 'src/repositories/user.repository';
@@ -30,6 +31,7 @@ class CustomWritable extends Writable {
type Asset = Insertable<Assets>;
type User = Partial<Insertable<Users>>;
type Session = Omit<Insertable<Sessions>, 'token'> & { token?: string };
type Partner = Insertable<Partners>;
export const newUuid = () => randomUUID() as string;
@@ -37,6 +39,7 @@ export class TestFactory {
private assets: Asset[] = [];
private sessions: Session[] = [];
private users: User[] = [];
private partners: Partner[] = [];
private constructor(private context: TestContext) {}
@@ -100,6 +103,17 @@ export class TestFactory {
};
}
static partner(partner: Partner) {
const defaults = {
inTimeline: true,
};
return {
...defaults,
...partner,
};
}
withAsset(asset: Asset) {
this.assets.push(asset);
return this;
@@ -115,6 +129,11 @@ export class TestFactory {
return this;
}
withPartner(partner: Partner) {
this.partners.push(partner);
return this;
}
async create() {
for (const asset of this.assets) {
await this.context.createAsset(asset);
@@ -124,6 +143,10 @@ export class TestFactory {
await this.context.createUser(user);
}
for (const partner of this.partners) {
await this.context.createPartner(partner);
}
for (const session of this.sessions) {
await this.context.createSession(session);
}
@@ -138,6 +161,7 @@ export class TestContext {
albumRepository: AlbumRepository;
sessionRepository: SessionRepository;
syncRepository: SyncRepository;
partnerRepository: PartnerRepository;
private constructor(private db: Kysely<DB>) {
this.userRepository = new UserRepository(this.db);
@@ -145,6 +169,7 @@ export class TestContext {
this.albumRepository = new AlbumRepository(this.db);
this.sessionRepository = new SessionRepository(this.db);
this.syncRepository = new SyncRepository(this.db);
this.partnerRepository = new PartnerRepository(this.db);
}
static from(db: Kysely<DB>) {
@@ -159,6 +184,10 @@ export class TestContext {
return this.userRepository.create(TestFactory.user(user));
}
createPartner(partner: Partner) {
return this.partnerRepository.create(TestFactory.partner(partner));
}
createAsset(asset: Asset) {
return this.assetRepository.create(TestFactory.asset(asset));
}