Compare commits

..

No commits in common. "3e75fb6ae24124697d7ec43d6fcfef8dd28def91" and "f3d43c71f7d883e2ef322230d1ded60e2fdf2f95" have entirely different histories.

14 changed files with 164 additions and 519 deletions

View file

@ -36,39 +36,6 @@ export type DateTimeFilter<$PrismaModel = never> = {
not?: Prisma.NestedDateTimeFilter<$PrismaModel> | Date | string not?: Prisma.NestedDateTimeFilter<$PrismaModel> | Date | string
} }
export type StringFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel>
in?: string[]
notIn?: string[]
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
gte?: string | Prisma.StringFieldRefInput<$PrismaModel>
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
not?: Prisma.NestedStringFilter<$PrismaModel> | string
}
export type StringNullableFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null
in?: string[] | null
notIn?: string[] | null
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
gte?: string | Prisma.StringFieldRefInput<$PrismaModel>
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
not?: Prisma.NestedStringNullableFilter<$PrismaModel> | string | null
}
export type SortOrderInput = {
sort: Prisma.SortOrder
nulls?: Prisma.NullsOrder
}
export type IntWithAggregatesFilter<$PrismaModel = never> = { export type IntWithAggregatesFilter<$PrismaModel = never> = {
equals?: number | Prisma.IntFieldRefInput<$PrismaModel> equals?: number | Prisma.IntFieldRefInput<$PrismaModel>
in?: number[] in?: number[]
@ -99,40 +66,6 @@ export type DateTimeWithAggregatesFilter<$PrismaModel = never> = {
_max?: Prisma.NestedDateTimeFilter<$PrismaModel> _max?: Prisma.NestedDateTimeFilter<$PrismaModel>
} }
export type StringWithAggregatesFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel>
in?: string[]
notIn?: string[]
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
gte?: string | Prisma.StringFieldRefInput<$PrismaModel>
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
not?: Prisma.NestedStringWithAggregatesFilter<$PrismaModel> | string
_count?: Prisma.NestedIntFilter<$PrismaModel>
_min?: Prisma.NestedStringFilter<$PrismaModel>
_max?: Prisma.NestedStringFilter<$PrismaModel>
}
export type StringNullableWithAggregatesFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null
in?: string[] | null
notIn?: string[] | null
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
gte?: string | Prisma.StringFieldRefInput<$PrismaModel>
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
not?: Prisma.NestedStringNullableWithAggregatesFilter<$PrismaModel> | string | null
_count?: Prisma.NestedIntNullableFilter<$PrismaModel>
_min?: Prisma.NestedStringNullableFilter<$PrismaModel>
_max?: Prisma.NestedStringNullableFilter<$PrismaModel>
}
export type NestedIntFilter<$PrismaModel = never> = { export type NestedIntFilter<$PrismaModel = never> = {
equals?: number | Prisma.IntFieldRefInput<$PrismaModel> equals?: number | Prisma.IntFieldRefInput<$PrismaModel>
in?: number[] in?: number[]
@ -155,34 +88,6 @@ export type NestedDateTimeFilter<$PrismaModel = never> = {
not?: Prisma.NestedDateTimeFilter<$PrismaModel> | Date | string not?: Prisma.NestedDateTimeFilter<$PrismaModel> | Date | string
} }
export type NestedStringFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel>
in?: string[]
notIn?: string[]
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
gte?: string | Prisma.StringFieldRefInput<$PrismaModel>
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
not?: Prisma.NestedStringFilter<$PrismaModel> | string
}
export type NestedStringNullableFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null
in?: string[] | null
notIn?: string[] | null
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
gte?: string | Prisma.StringFieldRefInput<$PrismaModel>
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
not?: Prisma.NestedStringNullableFilter<$PrismaModel> | string | null
}
export type NestedIntWithAggregatesFilter<$PrismaModel = never> = { export type NestedIntWithAggregatesFilter<$PrismaModel = never> = {
equals?: number | Prisma.IntFieldRefInput<$PrismaModel> equals?: number | Prisma.IntFieldRefInput<$PrismaModel>
in?: number[] in?: number[]
@ -224,49 +129,4 @@ export type NestedDateTimeWithAggregatesFilter<$PrismaModel = never> = {
_max?: Prisma.NestedDateTimeFilter<$PrismaModel> _max?: Prisma.NestedDateTimeFilter<$PrismaModel>
} }
export type NestedStringWithAggregatesFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel>
in?: string[]
notIn?: string[]
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
gte?: string | Prisma.StringFieldRefInput<$PrismaModel>
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
not?: Prisma.NestedStringWithAggregatesFilter<$PrismaModel> | string
_count?: Prisma.NestedIntFilter<$PrismaModel>
_min?: Prisma.NestedStringFilter<$PrismaModel>
_max?: Prisma.NestedStringFilter<$PrismaModel>
}
export type NestedStringNullableWithAggregatesFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null
in?: string[] | null
notIn?: string[] | null
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
gte?: string | Prisma.StringFieldRefInput<$PrismaModel>
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
not?: Prisma.NestedStringNullableWithAggregatesFilter<$PrismaModel> | string | null
_count?: Prisma.NestedIntNullableFilter<$PrismaModel>
_min?: Prisma.NestedStringNullableFilter<$PrismaModel>
_max?: Prisma.NestedStringNullableFilter<$PrismaModel>
}
export type NestedIntNullableFilter<$PrismaModel = never> = {
equals?: number | Prisma.IntFieldRefInput<$PrismaModel> | null
in?: number[] | null
notIn?: number[] | null
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
gte?: number | Prisma.IntFieldRefInput<$PrismaModel>
not?: Prisma.NestedIntNullableFilter<$PrismaModel> | number | null
}

View file

@ -20,7 +20,7 @@ const config: runtime.GetPrismaClientConfig = {
"clientVersion": "7.4.2", "clientVersion": "7.4.2",
"engineVersion": "94a226be1cf2967af2541cca5529f0f7ba866919", "engineVersion": "94a226be1cf2967af2541cca5529f0f7ba866919",
"activeProvider": "sqlite", "activeProvider": "sqlite",
"inlineSchema": "generator client {\n provider = \"prisma-client\"\n output = \"../generated/prisma\"\n}\n\ndatasource db {\n provider = \"sqlite\"\n}\n\nmodel PhotoPost {\n id Int @id @default(autoincrement())\n createdAt DateTime @default(now())\n fileName String @unique\n title String\n description String?\n}\n", "inlineSchema": "generator client {\n provider = \"prisma-client\"\n output = \"../generated/prisma\"\n}\n\ndatasource db {\n provider = \"sqlite\"\n}\n\nmodel PhotoPost {\n id Int @id @default(autoincrement())\n createdAt DateTime @default(now())\n}\n",
"runtimeDataModel": { "runtimeDataModel": {
"models": {}, "models": {},
"enums": {}, "enums": {},
@ -32,10 +32,10 @@ const config: runtime.GetPrismaClientConfig = {
} }
} }
config.runtimeDataModel = JSON.parse("{\"models\":{\"PhotoPost\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"fileName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") config.runtimeDataModel = JSON.parse("{\"models\":{\"PhotoPost\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}")
config.parameterizationSchema = { config.parameterizationSchema = {
strings: JSON.parse("[\"where\",\"PhotoPost.findUnique\",\"PhotoPost.findUniqueOrThrow\",\"orderBy\",\"cursor\",\"PhotoPost.findFirst\",\"PhotoPost.findFirstOrThrow\",\"PhotoPost.findMany\",\"data\",\"PhotoPost.createOne\",\"PhotoPost.createMany\",\"PhotoPost.createManyAndReturn\",\"PhotoPost.updateOne\",\"PhotoPost.updateMany\",\"PhotoPost.updateManyAndReturn\",\"create\",\"update\",\"PhotoPost.upsertOne\",\"PhotoPost.deleteOne\",\"PhotoPost.deleteMany\",\"having\",\"_count\",\"_avg\",\"_sum\",\"_min\",\"_max\",\"PhotoPost.groupBy\",\"PhotoPost.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"createdAt\",\"fileName\",\"title\",\"description\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"contains\",\"startsWith\",\"endsWith\",\"not\",\"set\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"), strings: JSON.parse("[\"where\",\"PhotoPost.findUnique\",\"PhotoPost.findUniqueOrThrow\",\"orderBy\",\"cursor\",\"PhotoPost.findFirst\",\"PhotoPost.findFirstOrThrow\",\"PhotoPost.findMany\",\"data\",\"PhotoPost.createOne\",\"PhotoPost.createMany\",\"PhotoPost.createManyAndReturn\",\"PhotoPost.updateOne\",\"PhotoPost.updateMany\",\"PhotoPost.updateManyAndReturn\",\"create\",\"update\",\"PhotoPost.upsertOne\",\"PhotoPost.deleteOne\",\"PhotoPost.deleteMany\",\"having\",\"_count\",\"_avg\",\"_sum\",\"_min\",\"_max\",\"PhotoPost.groupBy\",\"PhotoPost.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"createdAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"set\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"),
graph: "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" graph: "KwsQBRwAACIAMB0AAAQAEB4AACIAMB8CAAAAASBAACQAIQEAAAABACABAAAAAQAgBRwAACIAMB0AAAQAEB4AACIAMB8CACMAISBAACQAIQADAAAABAAgAwAABQAwBAAAAQAgAwAAAAQAIAMAAAUAMAQAAAEAIAMAAAAEACADAAAFADAEAAABACACHwIAAAABIEAAAAABAQgAAAkAIAIfAgAAAAEgQAAAAAEBCAAACwAwAQgAAAsAMAIfAgArACEgQAAqACECAAAAAQAgCAAADgAgAh8CACsAISBAACoAIQIAAAAEACAIAAAQACACAAAABAAgCAAAEAAgAwAAAAEAIA8AAAkAIBAAAA4AIAEAAAABACABAAAABAAgBRUAACUAIBYAACYAIBcAACkAIBgAACgAIBkAACcAIAUcAAAaADAdAAAXABAeAAAaADAfAgAbACEgQAAcACEDAAAABAAgAwAAFgAwFAAAFwAgAwAAAAQAIAMAAAUAMAQAAAEAIAUcAAAaADAdAAAXABAeAAAaADAfAgAbACEgQAAcACENFQAAHgAgFgAAIQAgFwAAHgAgGAAAHgAgGQAAHgAgIQIAAAABIgIAAAAEIwIAAAAEJAIAAAABJQIAAAABJgIAAAABJwIAAAABKAIAIAAhCxUAAB4AIBgAAB8AIBkAAB8AICFAAAAAASJAAAAABCNAAAAABCRAAAAAASVAAAAAASZAAAAAASdAAAAAAShAAB0AIQsVAAAeACAYAAAfACAZAAAfACAhQAAAAAEiQAAAAAQjQAAAAAQkQAAAAAElQAAAAAEmQAAAAAEnQAAAAAEoQAAdACEIIQIAAAABIgIAAAAEIwIAAAAEJAIAAAABJQIAAAABJgIAAAABJwIAAAABKAIAHgAhCCFAAAAAASJAAAAABCNAAAAABCRAAAAAASVAAAAAASZAAAAAASdAAAAAAShAAB8AIQ0VAAAeACAWAAAhACAXAAAeACAYAAAeACAZAAAeACAhAgAAAAEiAgAAAAQjAgAAAAQkAgAAAAElAgAAAAEmAgAAAAEnAgAAAAEoAgAgACEIIQgAAAABIggAAAAEIwgAAAAEJAgAAAABJQgAAAABJggAAAABJwgAAAABKAgAIQAhBRwAACIAMB0AAAQAEB4AACIAMB8CACMAISBAACQAIQghAgAAAAEiAgAAAAQjAgAAAAQkAgAAAAElAgAAAAEmAgAAAAEnAgAAAAEoAgAeACEIIUAAAAABIkAAAAAEI0AAAAAEJEAAAAABJUAAAAABJkAAAAABJ0AAAAABKEAAHwAhAAAAAAABKUAAAAABBSkCAAAAASoCAAAAASsCAAAAASwCAAAAAS0CAAAAAQAAAAAFFQAGFgAHFwAIGAAJGQAKAAAAAAAFFQAGFgAHFwAIGAAJGQAKAQIBAgMBBQYBBgcBBwgBCQoBCgwCCw0DDA8BDRECDhIEERMBEhQBExUCGhgFGxkL"
} }
async function decodeBase64AsWasm(wasmBase64: string): Promise<WebAssembly.Module> { async function decodeBase64AsWasm(wasmBase64: string): Promise<WebAssembly.Module> {

View file

@ -516,10 +516,7 @@ export type TransactionIsolationLevel = (typeof TransactionIsolationLevel)[keyof
export const PhotoPostScalarFieldEnum = { export const PhotoPostScalarFieldEnum = {
id: 'id', id: 'id',
createdAt: 'createdAt', createdAt: 'createdAt'
fileName: 'fileName',
title: 'title',
description: 'description'
} as const } as const
export type PhotoPostScalarFieldEnum = (typeof PhotoPostScalarFieldEnum)[keyof typeof PhotoPostScalarFieldEnum] export type PhotoPostScalarFieldEnum = (typeof PhotoPostScalarFieldEnum)[keyof typeof PhotoPostScalarFieldEnum]
@ -533,14 +530,6 @@ export const SortOrder = {
export type SortOrder = (typeof SortOrder)[keyof typeof SortOrder] export type SortOrder = (typeof SortOrder)[keyof typeof SortOrder]
export const NullsOrder = {
first: 'first',
last: 'last'
} as const
export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder]
/** /**
* Field references * Field references
@ -561,13 +550,6 @@ export type DateTimeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel
/**
* Reference to a field of type 'String'
*/
export type StringFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'String'>
/** /**
* Reference to a field of type 'Float' * Reference to a field of type 'Float'
*/ */

View file

@ -69,10 +69,7 @@ export type TransactionIsolationLevel = (typeof TransactionIsolationLevel)[keyof
export const PhotoPostScalarFieldEnum = { export const PhotoPostScalarFieldEnum = {
id: 'id', id: 'id',
createdAt: 'createdAt', createdAt: 'createdAt'
fileName: 'fileName',
title: 'title',
description: 'description'
} as const } as const
export type PhotoPostScalarFieldEnum = (typeof PhotoPostScalarFieldEnum)[keyof typeof PhotoPostScalarFieldEnum] export type PhotoPostScalarFieldEnum = (typeof PhotoPostScalarFieldEnum)[keyof typeof PhotoPostScalarFieldEnum]
@ -85,11 +82,3 @@ export const SortOrder = {
export type SortOrder = (typeof SortOrder)[keyof typeof SortOrder] export type SortOrder = (typeof SortOrder)[keyof typeof SortOrder]
export const NullsOrder = {
first: 'first',
last: 'last'
} as const
export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder]

View file

@ -37,25 +37,16 @@ export type PhotoPostSumAggregateOutputType = {
export type PhotoPostMinAggregateOutputType = { export type PhotoPostMinAggregateOutputType = {
id: number | null id: number | null
createdAt: Date | null createdAt: Date | null
fileName: string | null
title: string | null
description: string | null
} }
export type PhotoPostMaxAggregateOutputType = { export type PhotoPostMaxAggregateOutputType = {
id: number | null id: number | null
createdAt: Date | null createdAt: Date | null
fileName: string | null
title: string | null
description: string | null
} }
export type PhotoPostCountAggregateOutputType = { export type PhotoPostCountAggregateOutputType = {
id: number id: number
createdAt: number createdAt: number
fileName: number
title: number
description: number
_all: number _all: number
} }
@ -71,25 +62,16 @@ export type PhotoPostSumAggregateInputType = {
export type PhotoPostMinAggregateInputType = { export type PhotoPostMinAggregateInputType = {
id?: true id?: true
createdAt?: true createdAt?: true
fileName?: true
title?: true
description?: true
} }
export type PhotoPostMaxAggregateInputType = { export type PhotoPostMaxAggregateInputType = {
id?: true id?: true
createdAt?: true createdAt?: true
fileName?: true
title?: true
description?: true
} }
export type PhotoPostCountAggregateInputType = { export type PhotoPostCountAggregateInputType = {
id?: true id?: true
createdAt?: true createdAt?: true
fileName?: true
title?: true
description?: true
_all?: true _all?: true
} }
@ -182,9 +164,6 @@ export type PhotoPostGroupByArgs<ExtArgs extends runtime.Types.Extensions.Intern
export type PhotoPostGroupByOutputType = { export type PhotoPostGroupByOutputType = {
id: number id: number
createdAt: Date createdAt: Date
fileName: string
title: string
description: string | null
_count: PhotoPostCountAggregateOutputType | null _count: PhotoPostCountAggregateOutputType | null
_avg: PhotoPostAvgAggregateOutputType | null _avg: PhotoPostAvgAggregateOutputType | null
_sum: PhotoPostSumAggregateOutputType | null _sum: PhotoPostSumAggregateOutputType | null
@ -213,36 +192,24 @@ export type PhotoPostWhereInput = {
NOT?: Prisma.PhotoPostWhereInput | Prisma.PhotoPostWhereInput[] NOT?: Prisma.PhotoPostWhereInput | Prisma.PhotoPostWhereInput[]
id?: Prisma.IntFilter<"PhotoPost"> | number id?: Prisma.IntFilter<"PhotoPost"> | number
createdAt?: Prisma.DateTimeFilter<"PhotoPost"> | Date | string createdAt?: Prisma.DateTimeFilter<"PhotoPost"> | Date | string
fileName?: Prisma.StringFilter<"PhotoPost"> | string
title?: Prisma.StringFilter<"PhotoPost"> | string
description?: Prisma.StringNullableFilter<"PhotoPost"> | string | null
} }
export type PhotoPostOrderByWithRelationInput = { export type PhotoPostOrderByWithRelationInput = {
id?: Prisma.SortOrder id?: Prisma.SortOrder
createdAt?: Prisma.SortOrder createdAt?: Prisma.SortOrder
fileName?: Prisma.SortOrder
title?: Prisma.SortOrder
description?: Prisma.SortOrderInput | Prisma.SortOrder
} }
export type PhotoPostWhereUniqueInput = Prisma.AtLeast<{ export type PhotoPostWhereUniqueInput = Prisma.AtLeast<{
id?: number id?: number
fileName?: string
AND?: Prisma.PhotoPostWhereInput | Prisma.PhotoPostWhereInput[] AND?: Prisma.PhotoPostWhereInput | Prisma.PhotoPostWhereInput[]
OR?: Prisma.PhotoPostWhereInput[] OR?: Prisma.PhotoPostWhereInput[]
NOT?: Prisma.PhotoPostWhereInput | Prisma.PhotoPostWhereInput[] NOT?: Prisma.PhotoPostWhereInput | Prisma.PhotoPostWhereInput[]
createdAt?: Prisma.DateTimeFilter<"PhotoPost"> | Date | string createdAt?: Prisma.DateTimeFilter<"PhotoPost"> | Date | string
title?: Prisma.StringFilter<"PhotoPost"> | string }, "id">
description?: Prisma.StringNullableFilter<"PhotoPost"> | string | null
}, "id" | "fileName">
export type PhotoPostOrderByWithAggregationInput = { export type PhotoPostOrderByWithAggregationInput = {
id?: Prisma.SortOrder id?: Prisma.SortOrder
createdAt?: Prisma.SortOrder createdAt?: Prisma.SortOrder
fileName?: Prisma.SortOrder
title?: Prisma.SortOrder
description?: Prisma.SortOrderInput | Prisma.SortOrder
_count?: Prisma.PhotoPostCountOrderByAggregateInput _count?: Prisma.PhotoPostCountOrderByAggregateInput
_avg?: Prisma.PhotoPostAvgOrderByAggregateInput _avg?: Prisma.PhotoPostAvgOrderByAggregateInput
_max?: Prisma.PhotoPostMaxOrderByAggregateInput _max?: Prisma.PhotoPostMaxOrderByAggregateInput
@ -256,70 +223,43 @@ export type PhotoPostScalarWhereWithAggregatesInput = {
NOT?: Prisma.PhotoPostScalarWhereWithAggregatesInput | Prisma.PhotoPostScalarWhereWithAggregatesInput[] NOT?: Prisma.PhotoPostScalarWhereWithAggregatesInput | Prisma.PhotoPostScalarWhereWithAggregatesInput[]
id?: Prisma.IntWithAggregatesFilter<"PhotoPost"> | number id?: Prisma.IntWithAggregatesFilter<"PhotoPost"> | number
createdAt?: Prisma.DateTimeWithAggregatesFilter<"PhotoPost"> | Date | string createdAt?: Prisma.DateTimeWithAggregatesFilter<"PhotoPost"> | Date | string
fileName?: Prisma.StringWithAggregatesFilter<"PhotoPost"> | string
title?: Prisma.StringWithAggregatesFilter<"PhotoPost"> | string
description?: Prisma.StringNullableWithAggregatesFilter<"PhotoPost"> | string | null
} }
export type PhotoPostCreateInput = { export type PhotoPostCreateInput = {
createdAt?: Date | string createdAt?: Date | string
fileName: string
title: string
description?: string | null
} }
export type PhotoPostUncheckedCreateInput = { export type PhotoPostUncheckedCreateInput = {
id?: number id?: number
createdAt?: Date | string createdAt?: Date | string
fileName: string
title: string
description?: string | null
} }
export type PhotoPostUpdateInput = { export type PhotoPostUpdateInput = {
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
fileName?: Prisma.StringFieldUpdateOperationsInput | string
title?: Prisma.StringFieldUpdateOperationsInput | string
description?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
} }
export type PhotoPostUncheckedUpdateInput = { export type PhotoPostUncheckedUpdateInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number id?: Prisma.IntFieldUpdateOperationsInput | number
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
fileName?: Prisma.StringFieldUpdateOperationsInput | string
title?: Prisma.StringFieldUpdateOperationsInput | string
description?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
} }
export type PhotoPostCreateManyInput = { export type PhotoPostCreateManyInput = {
id?: number id?: number
createdAt?: Date | string createdAt?: Date | string
fileName: string
title: string
description?: string | null
} }
export type PhotoPostUpdateManyMutationInput = { export type PhotoPostUpdateManyMutationInput = {
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
fileName?: Prisma.StringFieldUpdateOperationsInput | string
title?: Prisma.StringFieldUpdateOperationsInput | string
description?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
} }
export type PhotoPostUncheckedUpdateManyInput = { export type PhotoPostUncheckedUpdateManyInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number id?: Prisma.IntFieldUpdateOperationsInput | number
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
fileName?: Prisma.StringFieldUpdateOperationsInput | string
title?: Prisma.StringFieldUpdateOperationsInput | string
description?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
} }
export type PhotoPostCountOrderByAggregateInput = { export type PhotoPostCountOrderByAggregateInput = {
id?: Prisma.SortOrder id?: Prisma.SortOrder
createdAt?: Prisma.SortOrder createdAt?: Prisma.SortOrder
fileName?: Prisma.SortOrder
title?: Prisma.SortOrder
description?: Prisma.SortOrder
} }
export type PhotoPostAvgOrderByAggregateInput = { export type PhotoPostAvgOrderByAggregateInput = {
@ -329,17 +269,11 @@ export type PhotoPostAvgOrderByAggregateInput = {
export type PhotoPostMaxOrderByAggregateInput = { export type PhotoPostMaxOrderByAggregateInput = {
id?: Prisma.SortOrder id?: Prisma.SortOrder
createdAt?: Prisma.SortOrder createdAt?: Prisma.SortOrder
fileName?: Prisma.SortOrder
title?: Prisma.SortOrder
description?: Prisma.SortOrder
} }
export type PhotoPostMinOrderByAggregateInput = { export type PhotoPostMinOrderByAggregateInput = {
id?: Prisma.SortOrder id?: Prisma.SortOrder
createdAt?: Prisma.SortOrder createdAt?: Prisma.SortOrder
fileName?: Prisma.SortOrder
title?: Prisma.SortOrder
description?: Prisma.SortOrder
} }
export type PhotoPostSumOrderByAggregateInput = { export type PhotoPostSumOrderByAggregateInput = {
@ -350,14 +284,6 @@ export type DateTimeFieldUpdateOperationsInput = {
set?: Date | string set?: Date | string
} }
export type StringFieldUpdateOperationsInput = {
set?: string
}
export type NullableStringFieldUpdateOperationsInput = {
set?: string | null
}
export type IntFieldUpdateOperationsInput = { export type IntFieldUpdateOperationsInput = {
set?: number set?: number
increment?: number increment?: number
@ -371,36 +297,24 @@ export type IntFieldUpdateOperationsInput = {
export type PhotoPostSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{ export type PhotoPostSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean id?: boolean
createdAt?: boolean createdAt?: boolean
fileName?: boolean
title?: boolean
description?: boolean
}, ExtArgs["result"]["photoPost"]> }, ExtArgs["result"]["photoPost"]>
export type PhotoPostSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{ export type PhotoPostSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean id?: boolean
createdAt?: boolean createdAt?: boolean
fileName?: boolean
title?: boolean
description?: boolean
}, ExtArgs["result"]["photoPost"]> }, ExtArgs["result"]["photoPost"]>
export type PhotoPostSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{ export type PhotoPostSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean id?: boolean
createdAt?: boolean createdAt?: boolean
fileName?: boolean
title?: boolean
description?: boolean
}, ExtArgs["result"]["photoPost"]> }, ExtArgs["result"]["photoPost"]>
export type PhotoPostSelectScalar = { export type PhotoPostSelectScalar = {
id?: boolean id?: boolean
createdAt?: boolean createdAt?: boolean
fileName?: boolean
title?: boolean
description?: boolean
} }
export type PhotoPostOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "createdAt" | "fileName" | "title" | "description", ExtArgs["result"]["photoPost"]> export type PhotoPostOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "createdAt", ExtArgs["result"]["photoPost"]>
export type $PhotoPostPayload<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { export type $PhotoPostPayload<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
name: "PhotoPost" name: "PhotoPost"
@ -408,9 +322,6 @@ export type $PhotoPostPayload<ExtArgs extends runtime.Types.Extensions.InternalA
scalars: runtime.Types.Extensions.GetPayloadResult<{ scalars: runtime.Types.Extensions.GetPayloadResult<{
id: number id: number
createdAt: Date createdAt: Date
fileName: string
title: string
description: string | null
}, ExtArgs["result"]["photoPost"]> }, ExtArgs["result"]["photoPost"]>
composites: {} composites: {}
} }
@ -836,9 +747,6 @@ export interface Prisma__PhotoPostClient<T, Null = never, ExtArgs extends runtim
export interface PhotoPostFieldRefs { export interface PhotoPostFieldRefs {
readonly id: Prisma.FieldRef<"PhotoPost", 'Int'> readonly id: Prisma.FieldRef<"PhotoPost", 'Int'>
readonly createdAt: Prisma.FieldRef<"PhotoPost", 'DateTime'> readonly createdAt: Prisma.FieldRef<"PhotoPost", 'DateTime'>
readonly fileName: Prisma.FieldRef<"PhotoPost", 'String'>
readonly title: Prisma.FieldRef<"PhotoPost", 'String'>
readonly description: Prisma.FieldRef<"PhotoPost", 'String'>
} }
@ -1033,7 +941,7 @@ export type PhotoPostCreateArgs<ExtArgs extends runtime.Types.Extensions.Interna
/** /**
* The data needed to create a PhotoPost. * The data needed to create a PhotoPost.
*/ */
data: Prisma.XOR<Prisma.PhotoPostCreateInput, Prisma.PhotoPostUncheckedCreateInput> data?: Prisma.XOR<Prisma.PhotoPostCreateInput, Prisma.PhotoPostUncheckedCreateInput>
} }
/** /**

View file

@ -1,24 +0,0 @@
/*
Warnings:
- Added the required column `description` to the `PhotoPost` table without a default value. This is not possible if the table is not empty.
- Added the required column `filePath` to the `PhotoPost` table without a default value. This is not possible if the table is not empty.
- Added the required column `title` to the `PhotoPost` table without a default value. This is not possible if the table is not empty.
*/
-- RedefineTables
PRAGMA defer_foreign_keys=ON;
PRAGMA foreign_keys=OFF;
CREATE TABLE "new_PhotoPost" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
"filePath" TEXT NOT NULL,
"title" TEXT NOT NULL,
"description" TEXT NOT NULL
);
INSERT INTO "new_PhotoPost" ("createdAt", "id") SELECT "createdAt", "id" FROM "PhotoPost";
DROP TABLE "PhotoPost";
ALTER TABLE "new_PhotoPost" RENAME TO "PhotoPost";
CREATE UNIQUE INDEX "PhotoPost_filePath_key" ON "PhotoPost"("filePath");
PRAGMA foreign_keys=ON;
PRAGMA defer_foreign_keys=OFF;

View file

@ -1,30 +0,0 @@
/*
Warnings:
- You are about to drop the column `filePath` on the `PhotoPost` table. All the data in the column will be lost.
- Added the required column `fileName` to the `PhotoPost` table without a default value. This is not possible if the table is not empty.
*/
-- RedefineTables
PRAGMA defer_foreign_keys=ON;
PRAGMA foreign_keys=OFF;
CREATE TABLE "new_PhotoPost" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
"fileName" TEXT NOT NULL,
"title" TEXT NOT NULL,
"description" TEXT
);
-- The filename field is the filepath, split by '/', and it's the last part,
-- so we need to modify the filePath column to fileName
ALTER TABLE "PhotoPost" ADD COLUMN "fileName" TEXT NOT NULL DEFAULT '';
UPDATE "PhotoPost" SET "fileName" = SUBSTR("filePath", INSTR("filePath", '/') + 1);
INSERT INTO "new_PhotoPost" ("createdAt", "description", "fileName", "id", "title") SELECT "createdAt", "description", "fileName", "id", "title" FROM "PhotoPost";
DROP TABLE "PhotoPost";
ALTER TABLE "new_PhotoPost" RENAME TO "PhotoPost";
CREATE UNIQUE INDEX "PhotoPost_fileName_key" ON "PhotoPost"("fileName");
PRAGMA foreign_keys=ON;
PRAGMA defer_foreign_keys=OFF;

View file

@ -10,8 +10,4 @@ datasource db {
model PhotoPost { model PhotoPost {
id Int @id @default(autoincrement()) id Int @id @default(autoincrement())
createdAt DateTime @default(now()) createdAt DateTime @default(now())
fileName String @unique
title String
description String?
} }

View file

@ -5,10 +5,6 @@ title: >-
date: 2026-02-20T17:26:06.111Z date: 2026-02-20T17:26:06.111Z
slug: 2026-02-20-immich-object-storage-upgrade slug: 2026-02-20-immich-object-storage-upgrade
author: Thomas Wilson-Cook author: Thomas Wilson-Cook
tag:
- technical
- self-hosting
- immich
--- ---
In my 2026 effort to write more about my personal computing setup, I want to document the switchover from Volume Mount SSD to Object Storage for my personal photo storage. In my 2026 effort to write more about my personal computing setup, I want to document the switchover from Volume Mount SSD to Object Storage for my personal photo storage.

View file

@ -3,9 +3,6 @@ title: 📖 Started reading "The Other Pandemic"
date: 2026-02-27T07:36:44.006Z date: 2026-02-27T07:36:44.006Z
slug: 2026-02-27--started-reading-the-other-pandemic slug: 2026-02-27--started-reading-the-other-pandemic
author: Thomas Wilson-Cook author: Thomas Wilson-Cook
tags:
- book-review
- reading
--- ---
I picked up James Ball's *The Other Pandemic: How QAnon Contaminated the World* ([bookshop.org](https://uk.bookshop.org/p/books/the-other-pandemic-how-qanon-contaminated-the-world-james-ball/7618064?ean=9781526642516&next=t)) from the library. Ball appeared on an episode of the podcast *Oh God What Now?* ([Apple Podcasts](https://podcasts.apple.com/gb/podcast/withstanding-the-farage-barrage-can-we-reform-proof-the-uk/id1245265763?i=1000750517915)) and the book sounded interesting. I've just crossed the one hundred page mark. I picked up James Ball's *The Other Pandemic: How QAnon Contaminated the World* ([bookshop.org](https://uk.bookshop.org/p/books/the-other-pandemic-how-qanon-contaminated-the-world-james-ball/7618064?ean=9781526642516&next=t)) from the library. Ball appeared on an episode of the podcast *Oh God What Now?* ([Apple Podcasts](https://podcasts.apple.com/gb/podcast/withstanding-the-farage-barrage-can-we-reform-proof-the-uk/id1245265763?i=1000750517915)) and the book sounded interesting. I've just crossed the one hundred page mark.

View file

@ -3,9 +3,6 @@ title: '📖 Book Review: The Evening and the Morning'
date: 2026-02-28T09:35:28.579Z date: 2026-02-28T09:35:28.579Z
slug: 2026-02-28-book-review-the-evening-and-the-morning slug: 2026-02-28-book-review-the-evening-and-the-morning
author: Thomas Wilson-Cook author: Thomas Wilson-Cook
tags:
- book-review
- reading
--- ---
This audiobook kept me company in the garden as I got through a handful of long-running chores. At twenty-four hours in length I'm happy to say that the garden is at best half-finished! This audiobook kept me company in the garden as I got through a handful of long-running chores. At twenty-four hours in length I'm happy to say that the garden is at best half-finished!

View file

@ -5,7 +5,6 @@ slug: 2026-03-13--book-review-the-other-pandemic
author: Thomas Wilson-Cook author: Thomas Wilson-Cook
tags: tags:
- book-review - book-review
- reading
--- ---

View file

@ -1,23 +0,0 @@
---
title: 📖 Started reading "Fundamentally" by Nussaibah Younis
date: 2026-03-15T17:27:13.661Z
slug: 2026-03-15-started-reading-fundamentally
author: Thomas Wilson-Cook
tags:
- journal
- reading
---
I picked up the 2025 Women's Prize shortlister "Fundamentally" by Nussaibah Younis. This was a Christmas gift from a family member, after I remember putting it down on my list because it ended up on a few end of year lists.
I remember being intrigued by the author. That she'd written this piece of fiction based heavily on her own experience in the humanitarian sector, working on deradicalisation at the UN.
At their worst, books like this can turn into strange power fantasies, or self-mythologies that strip away a lot of the nuance. It's how we can end up with the Manic Pixie Dream Girl ([wikipedia](https://en.wikipedia.org/wiki/Manic_Pixie_Dream_Girl)) or Mary Sue ([wikipedia](https://en.wikipedia.org/wiki/Mary_Sue))[^1].
I like Younis' interview in the Womens Prize ([link](https://womensprize.com/in-conversation-with-nussaibah-younis/)) because it seems like she might have gone the reverse direction, where the novel came after (or was part of) deconstructing that self-aggrandising narrative:
> I studied Arabic, read a lot of books, got a PhD. Then I went to Iraq. The trouble is, having an Iraqi father did not make me Iraqi, and having a PhD did not make me competent. I was just another idiot foreigner; well-meaning but totally out of my depth. I spent ten years as an NGO worker, trying to save Iraq. I lived an insane life, pursuing hair-brained schemes to build peace. My naivety shone like a spotlight as I played out my brown saviour fantasies, all the while being mocked and extorted by locals. Before long, I was embroiled in the farcical humanitarian sector. Id started out by asking: how can I help? But soon I was asking: how can I maximise my budgets? How can I curry favour with corrupt Iraqi ministers? And how can I screw over my rivals? As a workplace, humanitarianism is as aggressive as investment banking, except that lives hang in the balance
Like I said, I'm only really about an hour in but as I hurtle towards page 100 (the point at which I give myself complete freedom to did-not-finish a book), I can easily foresee making my way through this one.
[^1]: While one can gender the Mary Sue to a "Gary Stu" or "Marty Stu" , it's interesting that the Manic Pixie Dream Girl archetype relies a bit more on gender dynamics. I certainly don't think we see any Manic Pixie Dream Boys, and personally I wouldn't care to.

View file

@ -33,10 +33,8 @@
</svelte:head> </svelte:head>
<Navbar /> <Navbar />
<main class="thomaswilson-container blog"> <main class="thomaswilson-container blog">
<header class="blog__header"> <header class="blog__header">
<a href="/blog" class="weblog-link">Return to blog</a>
<h1 class="title post-title">{post.title}</h1> <h1 class="title post-title">{post.title}</h1>
<p class="post-author"> <p class="post-author">
{#if post.author} {#if post.author}