diff --git a/packages/experimental/src/VariantSchema.ts b/packages/experimental/src/VariantSchema.ts index 4da9e9bcd4..27db68a23e 100644 --- a/packages/experimental/src/VariantSchema.ts +++ b/packages/experimental/src/VariantSchema.ts @@ -248,7 +248,7 @@ type MissingSelfGeneric = * @since 1.0.0 * @category constructors */ -export const factory = < +export const make = < const Variants extends ReadonlyArray, const Default extends Variants[number] >(options: { diff --git a/packages/sql/src/Model.ts b/packages/sql/src/Model.ts index be07eaeaf4..f95872ddd9 100644 --- a/packages/sql/src/Model.ts +++ b/packages/sql/src/Model.ts @@ -9,7 +9,7 @@ const { Class, Field, Struct -} = VariantSchema.factory({ +} = VariantSchema.make({ variants: ["select", "insert", "update", "json", "jsonCreate", "jsonUpdate"], defaultVariant: "select" }) @@ -115,7 +115,7 @@ export interface GeneratedByApp + readonly json: typeof Schema.DateTimeUtcFromNumber + }> +{} + +/** + * A field that represents a date-time value that is inserted as the current + * `DateTime.Utc`. It is serialized as a `number`. + * + * It is omitted from updates and is available for selection. + * + * @since 1.0.0 + * @category schemas + */ +export const DateTimeInsertFromNumber: DateTimeInsertFromNumber = Field({ + select: Schema.DateTimeUtcFromNumber, + insert: DateTimeFromNumberWithNow, + json: Schema.DateTimeUtcFromNumber +}) + /** * @since 1.0.0 * @category models @@ -306,6 +338,36 @@ export const DateTimeUpdateFromDate: DateTimeUpdateFromDate = Field({ json: Schema.DateTimeUtc }) +/** + * @since 1.0.0 + * @category models + */ +export interface DateTimeUpdateFromNumber extends + VariantSchema.Field<{ + readonly select: typeof Schema.DateTimeUtcFromNumber + readonly insert: Schema.PropertySignature<":", DateTime.Utc, never, ":", number, true> + readonly update: Schema.PropertySignature<":", DateTime.Utc, never, ":", number, true> + readonly json: typeof Schema.DateTimeUtcFromNumber + }> +{} + +/** + * A field that represents a date-time value that is updated as the current + * `DateTime.Utc`. It is serialized as a `number`. + * + * It is set to the current `DateTime.Utc` on updates and inserts and is + * available for selection. + * + * @since 1.0.0 + * @category schemas + */ +export const DateTimeUpdateFromNumber: DateTimeUpdateFromNumber = Field({ + select: Schema.DateTimeUtcFromNumber, + insert: DateTimeFromNumberWithNow, + update: DateTimeFromNumberWithNow, + json: Schema.DateTimeUtcFromNumber +}) + /** * @since 1.0.0 * @category models