Feature: Basic Events, Models and Projections #2

Merged
piarrot merged 37 commits from feat-base-projections into main 2024-10-15 15:20:25 -03:00
10 changed files with 24 additions and 17 deletions
Showing only changes of commit 59810a2118 - Show all commits

View File

@ -1,9 +1,9 @@
import { ImageMimeType } from "../../../files/mime-type.js"; import { ImageMimeType } from "../../../files/mime-type.js";
import { DomainFile } from "./domain-file.js"; import { StoredFile } from "./stored-file.js";
/** /**
* Represents an image file. * Represents an image file.
*/ */
export interface ImageFile extends DomainFile { export interface ImageFile extends StoredFile {
mimeType: ImageMimeType; mimeType: ImageMimeType;
} }

View File

@ -1,2 +1,2 @@
export * from "./domain-file.js";
export * from "./image-file.js"; export * from "./image-file.js";
export * from "./stored-file.js";

View File

@ -4,6 +4,6 @@ import { Entity } from "../entity.js";
/** /**
* Represents a file as managed by the domain. * Represents a file as managed by the domain.
*/ */
export interface DomainFile extends BaseFile, Entity { export interface StoredFile extends BaseFile, Entity {
url: string; url: string;
} }

View File

@ -1,4 +1,5 @@
/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-explicit-any */
import { PosixDate } from "../../time/posix-date.js";
import { TaggedVariant } from "../../variant/variant.js"; import { TaggedVariant } from "../../variant/variant.js";
import { UUID } from "../types/uuid.js"; import { UUID } from "../types/uuid.js";
@ -10,3 +11,12 @@ export interface Event<TTag extends string = string, TPayload = any>
streamId: UUID; streamId: UUID;
payload: TPayload; payload: TPayload;
} }
/**
* A stored event is an inmutable event, already stored, with it's version in the stream and timestamp.
*/
export interface StoredEvent<TTag extends string = string, TPayload = any>
extends Readonly<Event<TTag, TPayload>> {
readonly version: number;
readonly timestamp: PosixDate;
}

View File

@ -25,11 +25,6 @@ interface BasicUseCaseDefinition<
*/ */
isAuthRequired: boolean; isAuthRequired: boolean;
/**
* The required permissions to execute the use case.
**/
requiredPermissions?: string[];
/** /**
* The use case function. * The use case function.
*/ */

View File

@ -1,8 +1,8 @@
export * from "./base-file.js"; export * from "./base-file.js";
export * from "./bytes.js"; export * from "./bytes.js";
export * from "./in-memory-file.js";
export * from "./invalid-file-type-error.js"; export * from "./invalid-file-type-error.js";
export * from "./is-in-memory-file.js";
export * from "./is-mime-type.js"; export * from "./is-mime-type.js";
export * from "./is-uploaded-file.js";
export * from "./media-file.js"; export * from "./media-file.js";
export * from "./mime-type.js"; export * from "./mime-type.js";
export * from "./uploaded-file.js";

View File

@ -1,6 +1,6 @@
import validator from "validator"; import validator from "validator";
import { isRecord } from "../record/is-record.js"; import { isRecord } from "../record/is-record.js";
import { InMemoryFile } from "./uploaded-file.js"; import { InMemoryFile } from "./in-memory-file.js";
const { isBase64, isMimeType } = validator; const { isBase64, isMimeType } = validator;

View File

@ -1,8 +1,8 @@
import { DomainFile } from "../domain/entity/files/domain-file.js"; import { StoredFile } from "../domain/entity/files/stored-file.js";
/** /**
* Represents a media file, either an image, a video or an audio file. * Represents a media file, either an image, a video or an audio file.
*/ */
export interface MediaFile extends DomainFile { export interface MediaFile extends StoredFile {
mimeType: `image/${string}` | `video/${string}` | `audio/${string}`; mimeType: `image/${string}` | `video/${string}` | `audio/${string}`;
} }

View File

@ -1,9 +1,11 @@
import { TaggedError } from "../error/tagged-error.js"; import { TaggedError } from "../error/tagged-error.js";
import { UnexpectedError } from "../error/unexpected-error.js";
/** /**
* Un Result representa el resultado de una operación * Un Result representa el resultado de una operación
* que puede ser un valor de tipo `TValue` o un error `TError`. * que puede ser un valor de tipo `TValue` o un error `TError`.
*/ */
export type Result<TValue, TError extends TaggedError<string>> = export type Result<
| TValue TValue,
| TError; TError extends TaggedError<string> = UnexpectedError,
> = TValue | TError;