import { validate } from "@olagg/validate"; import { inject, injectable } from "tsyringe"; import Item from "../domain/entities/item"; import User from "../domain/entities/user"; import ItemRepository from "../domain/repositories/item.repository"; import UserRepository from "../domain/repositories/user.repository"; import ListItemsService from "../domain/services/listItems.service"; import listItemsSchema from "../domain/services/schemas/listItems.schema"; import { ListItemAttr } from "../domain/types/item.type"; import Result from "../utils/result"; @injectable() export default class ListItemsServiceImpl implements ListItemsService { constructor( @inject("Items:ItemRepository") private repository: ItemRepository, @inject("Items:UserRepository") private userRepo: UserRepository ) { } @validate(listItemsSchema) async run(payload: ListItemAttr): Promise> { let user: User | undefined; if (payload.userId) user = await this.userRepo.find(payload.userId); const result = await this.repository.list(payload, user); return Result.success(result); } }