implemented other repos, services, objects ...

This commit is contained in:
2025-01-01 21:36:20 +00:00
parent 6d980a980e
commit 10c72f22c5
51 changed files with 5940 additions and 502 deletions
@@ -1501,15 +1501,15 @@ class TimeEntryDboDelegate {
}
}
class TaskDboDelegate {
const TaskDboDelegate._(this._client);
class ProjectTaskDboDelegate {
const ProjectTaskDboDelegate._(this._client);
final PrismaClient _client;
_i1.ActionClient<_i2.TaskDbo?> findUnique({
required _i3.TaskDboWhereUniqueInput where,
_i3.TaskDboSelect? select,
_i3.TaskDboInclude? include,
_i1.ActionClient<_i2.ProjectTaskDbo?> findUnique({
required _i3.ProjectTaskDboWhereUniqueInput where,
_i3.ProjectTaskDboSelect? select,
_i3.ProjectTaskDboInclude? include,
}) {
final args = {
'where': where,
@@ -1518,7 +1518,7 @@ class TaskDboDelegate {
};
final query = _i1.serializeJsonQuery(
args: args,
modelName: 'TaskDbo',
modelName: 'ProjectTaskDbo',
action: _i1.JsonQueryAction.findUnique,
datamodel: PrismaClient.datamodel,
);
@@ -1527,17 +1527,17 @@ class TaskDboDelegate {
headers: _client.$transaction.headers,
transaction: _client.$transaction.transaction,
);
return _i1.ActionClient<_i2.TaskDbo?>(
action: 'findUniqueTaskDbo',
return _i1.ActionClient<_i2.ProjectTaskDbo?>(
action: 'findUniqueProjectTaskDbo',
result: result,
factory: (e) => e != null ? _i2.TaskDbo.fromJson(e) : null,
factory: (e) => e != null ? _i2.ProjectTaskDbo.fromJson(e) : null,
);
}
_i1.ActionClient<_i2.TaskDbo> findUniqueOrThrow({
required _i3.TaskDboWhereUniqueInput where,
_i3.TaskDboSelect? select,
_i3.TaskDboInclude? include,
_i1.ActionClient<_i2.ProjectTaskDbo> findUniqueOrThrow({
required _i3.ProjectTaskDboWhereUniqueInput where,
_i3.ProjectTaskDboSelect? select,
_i3.ProjectTaskDboInclude? include,
}) {
final args = {
'where': where,
@@ -1546,7 +1546,7 @@ class TaskDboDelegate {
};
final query = _i1.serializeJsonQuery(
args: args,
modelName: 'TaskDbo',
modelName: 'ProjectTaskDbo',
action: _i1.JsonQueryAction.findUniqueOrThrow,
datamodel: PrismaClient.datamodel,
);
@@ -1555,24 +1555,26 @@ class TaskDboDelegate {
headers: _client.$transaction.headers,
transaction: _client.$transaction.transaction,
);
return _i1.ActionClient<_i2.TaskDbo>(
action: 'findUniqueTaskDboOrThrow',
return _i1.ActionClient<_i2.ProjectTaskDbo>(
action: 'findUniqueProjectTaskDboOrThrow',
result: result,
factory: (e) => _i2.TaskDbo.fromJson(e),
factory: (e) => _i2.ProjectTaskDbo.fromJson(e),
);
}
_i1.ActionClient<_i2.TaskDbo?> findFirst({
_i3.TaskDboWhereInput? where,
_i1.PrismaUnion<Iterable<_i3.TaskDboOrderByWithRelationInput>,
_i3.TaskDboOrderByWithRelationInput>?
_i1.ActionClient<_i2.ProjectTaskDbo?> findFirst({
_i3.ProjectTaskDboWhereInput? where,
_i1.PrismaUnion<Iterable<_i3.ProjectTaskDboOrderByWithRelationInput>,
_i3.ProjectTaskDboOrderByWithRelationInput>?
orderBy,
_i3.TaskDboWhereUniqueInput? cursor,
_i3.ProjectTaskDboWhereUniqueInput? cursor,
int? take,
int? skip,
_i1.PrismaUnion<_i3.TaskDboScalar, Iterable<_i3.TaskDboScalar>>? distinct,
_i3.TaskDboSelect? select,
_i3.TaskDboInclude? include,
_i1.PrismaUnion<_i3.ProjectTaskDboScalar,
Iterable<_i3.ProjectTaskDboScalar>>?
distinct,
_i3.ProjectTaskDboSelect? select,
_i3.ProjectTaskDboInclude? include,
}) {
final args = {
'where': where,
@@ -1586,7 +1588,7 @@ class TaskDboDelegate {
};
final query = _i1.serializeJsonQuery(
args: args,
modelName: 'TaskDbo',
modelName: 'ProjectTaskDbo',
action: _i1.JsonQueryAction.findFirst,
datamodel: PrismaClient.datamodel,
);
@@ -1595,24 +1597,26 @@ class TaskDboDelegate {
headers: _client.$transaction.headers,
transaction: _client.$transaction.transaction,
);
return _i1.ActionClient<_i2.TaskDbo?>(
action: 'findFirstTaskDbo',
return _i1.ActionClient<_i2.ProjectTaskDbo?>(
action: 'findFirstProjectTaskDbo',
result: result,
factory: (e) => e != null ? _i2.TaskDbo.fromJson(e) : null,
factory: (e) => e != null ? _i2.ProjectTaskDbo.fromJson(e) : null,
);
}
_i1.ActionClient<_i2.TaskDbo> findFirstOrThrow({
_i3.TaskDboWhereInput? where,
_i1.PrismaUnion<Iterable<_i3.TaskDboOrderByWithRelationInput>,
_i3.TaskDboOrderByWithRelationInput>?
_i1.ActionClient<_i2.ProjectTaskDbo> findFirstOrThrow({
_i3.ProjectTaskDboWhereInput? where,
_i1.PrismaUnion<Iterable<_i3.ProjectTaskDboOrderByWithRelationInput>,
_i3.ProjectTaskDboOrderByWithRelationInput>?
orderBy,
_i3.TaskDboWhereUniqueInput? cursor,
_i3.ProjectTaskDboWhereUniqueInput? cursor,
int? take,
int? skip,
_i1.PrismaUnion<_i3.TaskDboScalar, Iterable<_i3.TaskDboScalar>>? distinct,
_i3.TaskDboSelect? select,
_i3.TaskDboInclude? include,
_i1.PrismaUnion<_i3.ProjectTaskDboScalar,
Iterable<_i3.ProjectTaskDboScalar>>?
distinct,
_i3.ProjectTaskDboSelect? select,
_i3.ProjectTaskDboInclude? include,
}) {
final args = {
'where': where,
@@ -1626,7 +1630,7 @@ class TaskDboDelegate {
};
final query = _i1.serializeJsonQuery(
args: args,
modelName: 'TaskDbo',
modelName: 'ProjectTaskDbo',
action: _i1.JsonQueryAction.findFirstOrThrow,
datamodel: PrismaClient.datamodel,
);
@@ -1635,24 +1639,26 @@ class TaskDboDelegate {
headers: _client.$transaction.headers,
transaction: _client.$transaction.transaction,
);
return _i1.ActionClient<_i2.TaskDbo>(
action: 'findFirstTaskDboOrThrow',
return _i1.ActionClient<_i2.ProjectTaskDbo>(
action: 'findFirstProjectTaskDboOrThrow',
result: result,
factory: (e) => _i2.TaskDbo.fromJson(e),
factory: (e) => _i2.ProjectTaskDbo.fromJson(e),
);
}
_i1.ActionClient<Iterable<_i2.TaskDbo>> findMany({
_i3.TaskDboWhereInput? where,
_i1.PrismaUnion<Iterable<_i3.TaskDboOrderByWithRelationInput>,
_i3.TaskDboOrderByWithRelationInput>?
_i1.ActionClient<Iterable<_i2.ProjectTaskDbo>> findMany({
_i3.ProjectTaskDboWhereInput? where,
_i1.PrismaUnion<Iterable<_i3.ProjectTaskDboOrderByWithRelationInput>,
_i3.ProjectTaskDboOrderByWithRelationInput>?
orderBy,
_i3.TaskDboWhereUniqueInput? cursor,
_i3.ProjectTaskDboWhereUniqueInput? cursor,
int? take,
int? skip,
_i1.PrismaUnion<_i3.TaskDboScalar, Iterable<_i3.TaskDboScalar>>? distinct,
_i3.TaskDboSelect? select,
_i3.TaskDboInclude? include,
_i1.PrismaUnion<_i3.ProjectTaskDboScalar,
Iterable<_i3.ProjectTaskDboScalar>>?
distinct,
_i3.ProjectTaskDboSelect? select,
_i3.ProjectTaskDboInclude? include,
}) {
final args = {
'where': where,
@@ -1666,7 +1672,7 @@ class TaskDboDelegate {
};
final query = _i1.serializeJsonQuery(
args: args,
modelName: 'TaskDbo',
modelName: 'ProjectTaskDbo',
action: _i1.JsonQueryAction.findMany,
datamodel: PrismaClient.datamodel,
);
@@ -1675,20 +1681,20 @@ class TaskDboDelegate {
headers: _client.$transaction.headers,
transaction: _client.$transaction.transaction,
);
return _i1.ActionClient<Iterable<_i2.TaskDbo>>(
action: 'findManyTaskDbo',
return _i1.ActionClient<Iterable<_i2.ProjectTaskDbo>>(
action: 'findManyProjectTaskDbo',
result: result,
factory: (values) =>
(values as Iterable).map((e) => _i2.TaskDbo.fromJson(e)),
(values as Iterable).map((e) => _i2.ProjectTaskDbo.fromJson(e)),
);
}
_i1.ActionClient<_i2.TaskDbo> create({
required _i1
.PrismaUnion<_i3.TaskDboCreateInput, _i3.TaskDboUncheckedCreateInput>
_i1.ActionClient<_i2.ProjectTaskDbo> create({
required _i1.PrismaUnion<_i3.ProjectTaskDboCreateInput,
_i3.ProjectTaskDboUncheckedCreateInput>
data,
_i3.TaskDboSelect? select,
_i3.TaskDboInclude? include,
_i3.ProjectTaskDboSelect? select,
_i3.ProjectTaskDboInclude? include,
}) {
final args = {
'data': data,
@@ -1697,7 +1703,7 @@ class TaskDboDelegate {
};
final query = _i1.serializeJsonQuery(
args: args,
modelName: 'TaskDbo',
modelName: 'ProjectTaskDbo',
action: _i1.JsonQueryAction.createOne,
datamodel: PrismaClient.datamodel,
);
@@ -1706,16 +1712,16 @@ class TaskDboDelegate {
headers: _client.$transaction.headers,
transaction: _client.$transaction.transaction,
);
return _i1.ActionClient<_i2.TaskDbo>(
action: 'createOneTaskDbo',
return _i1.ActionClient<_i2.ProjectTaskDbo>(
action: 'createOneProjectTaskDbo',
result: result,
factory: (e) => _i2.TaskDbo.fromJson(e),
factory: (e) => _i2.ProjectTaskDbo.fromJson(e),
);
}
_i1.ActionClient<_i3.AffectedRowsOutput> createMany({
required _i1.PrismaUnion<_i3.TaskDboCreateManyInput,
Iterable<_i3.TaskDboCreateManyInput>>
required _i1.PrismaUnion<_i3.ProjectTaskDboCreateManyInput,
Iterable<_i3.ProjectTaskDboCreateManyInput>>
data,
bool? skipDuplicates,
}) {
@@ -1725,7 +1731,7 @@ class TaskDboDelegate {
};
final query = _i1.serializeJsonQuery(
args: args,
modelName: 'TaskDbo',
modelName: 'ProjectTaskDbo',
action: _i1.JsonQueryAction.createMany,
datamodel: PrismaClient.datamodel,
);
@@ -1735,20 +1741,20 @@ class TaskDboDelegate {
transaction: _client.$transaction.transaction,
);
return _i1.ActionClient<_i3.AffectedRowsOutput>(
action: 'createManyTaskDbo',
action: 'createManyProjectTaskDbo',
result: result,
factory: (e) => _i3.AffectedRowsOutput.fromJson(e),
);
}
_i1.ActionClient<Iterable<_i2.CreateManyTaskDboAndReturnOutputType>>
_i1.ActionClient<Iterable<_i2.CreateManyProjectTaskDboAndReturnOutputType>>
createManyAndReturn({
required _i1.PrismaUnion<_i3.TaskDboCreateManyInput,
Iterable<_i3.TaskDboCreateManyInput>>
required _i1.PrismaUnion<_i3.ProjectTaskDboCreateManyInput,
Iterable<_i3.ProjectTaskDboCreateManyInput>>
data,
bool? skipDuplicates,
_i3.CreateManyTaskDboAndReturnOutputTypeSelect? select,
_i3.CreateManyTaskDboAndReturnOutputTypeInclude? include,
_i3.CreateManyProjectTaskDboAndReturnOutputTypeSelect? select,
_i3.CreateManyProjectTaskDboAndReturnOutputTypeInclude? include,
}) {
final args = {
'data': data,
@@ -1758,7 +1764,7 @@ class TaskDboDelegate {
};
final query = _i1.serializeJsonQuery(
args: args,
modelName: 'TaskDbo',
modelName: 'ProjectTaskDbo',
action: _i1.JsonQueryAction.createManyAndReturn,
datamodel: PrismaClient.datamodel,
);
@@ -1767,21 +1773,22 @@ class TaskDboDelegate {
headers: _client.$transaction.headers,
transaction: _client.$transaction.transaction,
);
return _i1.ActionClient<Iterable<_i2.CreateManyTaskDboAndReturnOutputType>>(
action: 'createManyTaskDboAndReturn',
return _i1.ActionClient<
Iterable<_i2.CreateManyProjectTaskDboAndReturnOutputType>>(
action: 'createManyProjectTaskDboAndReturn',
result: result,
factory: (values) => (values as Iterable)
.map((e) => _i2.CreateManyTaskDboAndReturnOutputType.fromJson(e)),
factory: (values) => (values as Iterable).map(
(e) => _i2.CreateManyProjectTaskDboAndReturnOutputType.fromJson(e)),
);
}
_i1.ActionClient<_i2.TaskDbo?> update({
required _i1
.PrismaUnion<_i3.TaskDboUpdateInput, _i3.TaskDboUncheckedUpdateInput>
_i1.ActionClient<_i2.ProjectTaskDbo?> update({
required _i1.PrismaUnion<_i3.ProjectTaskDboUpdateInput,
_i3.ProjectTaskDboUncheckedUpdateInput>
data,
required _i3.TaskDboWhereUniqueInput where,
_i3.TaskDboSelect? select,
_i3.TaskDboInclude? include,
required _i3.ProjectTaskDboWhereUniqueInput where,
_i3.ProjectTaskDboSelect? select,
_i3.ProjectTaskDboInclude? include,
}) {
final args = {
'data': data,
@@ -1791,7 +1798,7 @@ class TaskDboDelegate {
};
final query = _i1.serializeJsonQuery(
args: args,
modelName: 'TaskDbo',
modelName: 'ProjectTaskDbo',
action: _i1.JsonQueryAction.updateOne,
datamodel: PrismaClient.datamodel,
);
@@ -1800,18 +1807,18 @@ class TaskDboDelegate {
headers: _client.$transaction.headers,
transaction: _client.$transaction.transaction,
);
return _i1.ActionClient<_i2.TaskDbo?>(
action: 'updateOneTaskDbo',
return _i1.ActionClient<_i2.ProjectTaskDbo?>(
action: 'updateOneProjectTaskDbo',
result: result,
factory: (e) => e != null ? _i2.TaskDbo.fromJson(e) : null,
factory: (e) => e != null ? _i2.ProjectTaskDbo.fromJson(e) : null,
);
}
_i1.ActionClient<_i3.AffectedRowsOutput> updateMany({
required _i1.PrismaUnion<_i3.TaskDboUpdateManyMutationInput,
_i3.TaskDboUncheckedUpdateManyInput>
required _i1.PrismaUnion<_i3.ProjectTaskDboUpdateManyMutationInput,
_i3.ProjectTaskDboUncheckedUpdateManyInput>
data,
_i3.TaskDboWhereInput? where,
_i3.ProjectTaskDboWhereInput? where,
}) {
final args = {
'data': data,
@@ -1819,7 +1826,7 @@ class TaskDboDelegate {
};
final query = _i1.serializeJsonQuery(
args: args,
modelName: 'TaskDbo',
modelName: 'ProjectTaskDbo',
action: _i1.JsonQueryAction.updateMany,
datamodel: PrismaClient.datamodel,
);
@@ -1829,22 +1836,22 @@ class TaskDboDelegate {
transaction: _client.$transaction.transaction,
);
return _i1.ActionClient<_i3.AffectedRowsOutput>(
action: 'updateManyTaskDbo',
action: 'updateManyProjectTaskDbo',
result: result,
factory: (e) => _i3.AffectedRowsOutput.fromJson(e),
);
}
_i1.ActionClient<_i2.TaskDbo> upsert({
required _i3.TaskDboWhereUniqueInput where,
required _i1
.PrismaUnion<_i3.TaskDboCreateInput, _i3.TaskDboUncheckedCreateInput>
_i1.ActionClient<_i2.ProjectTaskDbo> upsert({
required _i3.ProjectTaskDboWhereUniqueInput where,
required _i1.PrismaUnion<_i3.ProjectTaskDboCreateInput,
_i3.ProjectTaskDboUncheckedCreateInput>
create,
required _i1
.PrismaUnion<_i3.TaskDboUpdateInput, _i3.TaskDboUncheckedUpdateInput>
required _i1.PrismaUnion<_i3.ProjectTaskDboUpdateInput,
_i3.ProjectTaskDboUncheckedUpdateInput>
update,
_i3.TaskDboSelect? select,
_i3.TaskDboInclude? include,
_i3.ProjectTaskDboSelect? select,
_i3.ProjectTaskDboInclude? include,
}) {
final args = {
'where': where,
@@ -1855,7 +1862,7 @@ class TaskDboDelegate {
};
final query = _i1.serializeJsonQuery(
args: args,
modelName: 'TaskDbo',
modelName: 'ProjectTaskDbo',
action: _i1.JsonQueryAction.upsertOne,
datamodel: PrismaClient.datamodel,
);
@@ -1864,17 +1871,17 @@ class TaskDboDelegate {
headers: _client.$transaction.headers,
transaction: _client.$transaction.transaction,
);
return _i1.ActionClient<_i2.TaskDbo>(
action: 'upsertOneTaskDbo',
return _i1.ActionClient<_i2.ProjectTaskDbo>(
action: 'upsertOneProjectTaskDbo',
result: result,
factory: (e) => _i2.TaskDbo.fromJson(e),
factory: (e) => _i2.ProjectTaskDbo.fromJson(e),
);
}
_i1.ActionClient<_i2.TaskDbo?> delete({
required _i3.TaskDboWhereUniqueInput where,
_i3.TaskDboSelect? select,
_i3.TaskDboInclude? include,
_i1.ActionClient<_i2.ProjectTaskDbo?> delete({
required _i3.ProjectTaskDboWhereUniqueInput where,
_i3.ProjectTaskDboSelect? select,
_i3.ProjectTaskDboInclude? include,
}) {
final args = {
'where': where,
@@ -1883,7 +1890,7 @@ class TaskDboDelegate {
};
final query = _i1.serializeJsonQuery(
args: args,
modelName: 'TaskDbo',
modelName: 'ProjectTaskDbo',
action: _i1.JsonQueryAction.deleteOne,
datamodel: PrismaClient.datamodel,
);
@@ -1892,19 +1899,19 @@ class TaskDboDelegate {
headers: _client.$transaction.headers,
transaction: _client.$transaction.transaction,
);
return _i1.ActionClient<_i2.TaskDbo?>(
action: 'deleteOneTaskDbo',
return _i1.ActionClient<_i2.ProjectTaskDbo?>(
action: 'deleteOneProjectTaskDbo',
result: result,
factory: (e) => e != null ? _i2.TaskDbo.fromJson(e) : null,
factory: (e) => e != null ? _i2.ProjectTaskDbo.fromJson(e) : null,
);
}
_i1.ActionClient<_i3.AffectedRowsOutput> deleteMany(
{_i3.TaskDboWhereInput? where}) {
{_i3.ProjectTaskDboWhereInput? where}) {
final args = {'where': where};
final query = _i1.serializeJsonQuery(
args: args,
modelName: 'TaskDbo',
modelName: 'ProjectTaskDbo',
action: _i1.JsonQueryAction.deleteMany,
datamodel: PrismaClient.datamodel,
);
@@ -1914,22 +1921,24 @@ class TaskDboDelegate {
transaction: _client.$transaction.transaction,
);
return _i1.ActionClient<_i3.AffectedRowsOutput>(
action: 'deleteManyTaskDbo',
action: 'deleteManyProjectTaskDbo',
result: result,
factory: (e) => _i3.AffectedRowsOutput.fromJson(e),
);
}
_i1.ActionClient<Iterable<_i3.TaskDboGroupByOutputType>> groupBy({
_i3.TaskDboWhereInput? where,
_i1.PrismaUnion<Iterable<_i3.TaskDboOrderByWithAggregationInput>,
_i3.TaskDboOrderByWithAggregationInput>?
_i1.ActionClient<Iterable<_i3.ProjectTaskDboGroupByOutputType>> groupBy({
_i3.ProjectTaskDboWhereInput? where,
_i1.PrismaUnion<Iterable<_i3.ProjectTaskDboOrderByWithAggregationInput>,
_i3.ProjectTaskDboOrderByWithAggregationInput>?
orderBy,
required _i1.PrismaUnion<Iterable<_i3.TaskDboScalar>, _i3.TaskDboScalar> by,
_i3.TaskDboScalarWhereWithAggregatesInput? having,
required _i1.PrismaUnion<Iterable<_i3.ProjectTaskDboScalar>,
_i3.ProjectTaskDboScalar>
by,
_i3.ProjectTaskDboScalarWhereWithAggregatesInput? having,
int? take,
int? skip,
_i3.TaskDboGroupByOutputTypeSelect? select,
_i3.ProjectTaskDboGroupByOutputTypeSelect? select,
}) {
final args = {
'where': where,
@@ -1942,7 +1951,7 @@ class TaskDboDelegate {
};
final query = _i1.serializeJsonQuery(
args: args,
modelName: 'TaskDbo',
modelName: 'ProjectTaskDbo',
action: _i1.JsonQueryAction.groupBy,
datamodel: PrismaClient.datamodel,
);
@@ -1951,23 +1960,23 @@ class TaskDboDelegate {
headers: _client.$transaction.headers,
transaction: _client.$transaction.transaction,
);
return _i1.ActionClient<Iterable<_i3.TaskDboGroupByOutputType>>(
action: 'groupByTaskDbo',
return _i1.ActionClient<Iterable<_i3.ProjectTaskDboGroupByOutputType>>(
action: 'groupByProjectTaskDbo',
result: result,
factory: (values) => (values as Iterable)
.map((e) => _i3.TaskDboGroupByOutputType.fromJson(e)),
.map((e) => _i3.ProjectTaskDboGroupByOutputType.fromJson(e)),
);
}
_i1.ActionClient<_i3.AggregateTaskDbo> aggregate({
_i3.TaskDboWhereInput? where,
_i1.PrismaUnion<Iterable<_i3.TaskDboOrderByWithRelationInput>,
_i3.TaskDboOrderByWithRelationInput>?
_i1.ActionClient<_i3.AggregateProjectTaskDbo> aggregate({
_i3.ProjectTaskDboWhereInput? where,
_i1.PrismaUnion<Iterable<_i3.ProjectTaskDboOrderByWithRelationInput>,
_i3.ProjectTaskDboOrderByWithRelationInput>?
orderBy,
_i3.TaskDboWhereUniqueInput? cursor,
_i3.ProjectTaskDboWhereUniqueInput? cursor,
int? take,
int? skip,
_i3.AggregateTaskDboSelect? select,
_i3.AggregateProjectTaskDboSelect? select,
}) {
final args = {
'where': where,
@@ -1979,7 +1988,7 @@ class TaskDboDelegate {
};
final query = _i1.serializeJsonQuery(
args: args,
modelName: 'TaskDbo',
modelName: 'ProjectTaskDbo',
action: _i1.JsonQueryAction.aggregate,
datamodel: PrismaClient.datamodel,
);
@@ -1988,10 +1997,10 @@ class TaskDboDelegate {
headers: _client.$transaction.headers,
transaction: _client.$transaction.transaction,
);
return _i1.ActionClient<_i3.AggregateTaskDbo>(
action: 'aggregateTaskDbo',
return _i1.ActionClient<_i3.AggregateProjectTaskDbo>(
action: 'aggregateProjectTaskDbo',
result: result,
factory: (e) => _i3.AggregateTaskDbo.fromJson(e),
factory: (e) => _i3.AggregateProjectTaskDbo.fromJson(e),
);
}
}
@@ -2219,9 +2228,9 @@ class PrismaClient extends _i1.BasePrismaClient<PrismaClient> {
'isId': false,
'isReadOnly': false,
'hasDefaultValue': false,
'type': 'TaskDbo',
'type': 'ProjectTaskDbo',
'nativeType': null,
'relationName': 'ProjectDboToTaskDbo',
'relationName': 'ProjectDboToProjectTaskDbo',
'relationFromFields': [],
'relationToFields': [],
'isGenerated': false,
@@ -2479,7 +2488,7 @@ class PrismaClient extends _i1.BasePrismaClient<PrismaClient> {
'isGenerated': false,
},
{
'name': 'TaskDbo',
'name': 'ProjectTaskDbo',
'dbName': null,
'schema': null,
'fields': [
@@ -2540,7 +2549,7 @@ class PrismaClient extends _i1.BasePrismaClient<PrismaClient> {
'hasDefaultValue': false,
'type': 'ProjectDbo',
'nativeType': null,
'relationName': 'ProjectDboToTaskDbo',
'relationName': 'ProjectDboToProjectTaskDbo',
'relationFromFields': ['projectId'],
'relationToFields': ['id'],
'isGenerated': false,
@@ -2634,7 +2643,7 @@ class PrismaClient extends _i1.BasePrismaClient<PrismaClient> {
],
},
{
'model': 'TaskDbo',
'model': 'ProjectTaskDbo',
'type': 'id',
'isDefinedOnField': true,
'fields': [
@@ -2671,7 +2680,7 @@ class PrismaClient extends _i1.BasePrismaClient<PrismaClient> {
@override
get $engine => _engine ??= _i5.BinaryEngine(
schema:
'generator dartClient {\n provider = "dart run orm"\n output = "../lib/infrastructure/persistence/db"\n}\n\ndatasource db {\n provider = "postgresql"\n url = env("DATABASE_URL")\n}\n\n// User Model\nmodel UserDbo {\n id String @id @default(uuid())\n name String\n email String @unique\n password String\n projects ProjectDbo[] // Beziehung zu Projekten\n timeEntries TimeEntryDbo[] // Beziehung zu Zeiteinträgen\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\n// Project Model\nmodel ProjectDbo {\n id String @id @default(uuid())\n name String\n description String?\n clientId String?\n tasks TaskDbo[] // Beziehung zu Aufgaben\n timeEntries TimeEntryDbo[] // Beziehung zu Zeiteinträgen\n user UserDbo @relation(fields: [userId], references: [id])\n userId String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\n// TimeEntry Model\nmodel TimeEntryDbo {\n id String @id @default(uuid())\n startTime DateTime\n endTime DateTime\n description String?\n user UserDbo @relation(fields: [userId], references: [id])\n userId String\n project ProjectDbo @relation(fields: [projectId], references: [id])\n projectId String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\n// Task Model (optional)\nmodel TaskDbo {\n id String @id @default(uuid())\n name String\n description String?\n project ProjectDbo @relation(fields: [projectId], references: [id])\n projectId String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n',
'generator dartClient {\n provider = "dart run orm"\n output = "../lib/infrastructure/persistence/db"\n}\n\ndatasource db {\n provider = "postgresql"\n url = env("DATABASE_URL")\n}\n\n// User Model\nmodel UserDbo {\n id String @id @default(uuid())\n name String\n email String @unique\n password String\n projects ProjectDbo[] // Beziehung zu Projekten\n timeEntries TimeEntryDbo[] // Beziehung zu Zeiteinträgen\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\n// Project Model\nmodel ProjectDbo {\n id String @id @default(uuid())\n name String\n description String?\n clientId String?\n tasks ProjectTaskDbo[] // Beziehung zu Aufgaben\n timeEntries TimeEntryDbo[] // Beziehung zu Zeiteinträgen\n user UserDbo @relation(fields: [userId], references: [id])\n userId String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\n// TimeEntry Model\nmodel TimeEntryDbo {\n id String @id @default(uuid())\n startTime DateTime\n endTime DateTime\n description String?\n user UserDbo @relation(fields: [userId], references: [id])\n userId String\n project ProjectDbo @relation(fields: [projectId], references: [id])\n projectId String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\n// Task Model (optional)\nmodel ProjectTaskDbo {\n id String @id @default(uuid())\n name String\n description String?\n project ProjectDbo @relation(fields: [projectId], references: [id])\n projectId String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n',
datasources: const {
'db': _i1.Datasource(
_i1.DatasourceType.environment,
@@ -2690,5 +2699,5 @@ class PrismaClient extends _i1.BasePrismaClient<PrismaClient> {
TimeEntryDboDelegate get timeEntryDbo => TimeEntryDboDelegate._(this);
TaskDboDelegate get taskDbo => TaskDboDelegate._(this);
ProjectTaskDboDelegate get projectTaskDbo => ProjectTaskDboDelegate._(this);
}
@@ -2,8 +2,8 @@
import 'model.dart' as _i1;
import 'prisma.dart' as _i2;
class TaskDbo {
const TaskDbo({
class ProjectTaskDbo {
const ProjectTaskDbo({
this.id,
this.name,
this.description,
@@ -13,7 +13,7 @@ class TaskDbo {
this.project,
});
factory TaskDbo.fromJson(Map json) => TaskDbo(
factory ProjectTaskDbo.fromJson(Map json) => ProjectTaskDbo(
id: json['id'],
name: json['name'],
description: json['description'],
@@ -169,7 +169,7 @@ class ProjectDbo {
_ => json['updatedAt']
},
tasks: (json['tasks'] as Iterable?)
?.map((json) => _i1.TaskDbo.fromJson(json)),
?.map((json) => _i1.ProjectTaskDbo.fromJson(json)),
timeEntries: (json['timeEntries'] as Iterable?)
?.map((json) => _i1.TimeEntryDbo.fromJson(json)),
user: json['user'] is Map ? _i1.UserDbo.fromJson(json['user']) : null,
@@ -192,7 +192,7 @@ class ProjectDbo {
final DateTime? updatedAt;
final Iterable<_i1.TaskDbo>? tasks;
final Iterable<_i1.ProjectTaskDbo>? tasks;
final Iterable<_i1.TimeEntryDbo>? timeEntries;
@@ -473,8 +473,8 @@ class CreateManyTimeEntryDboAndReturnOutputType {
};
}
class CreateManyTaskDboAndReturnOutputType {
const CreateManyTaskDboAndReturnOutputType({
class CreateManyProjectTaskDboAndReturnOutputType {
const CreateManyProjectTaskDboAndReturnOutputType({
this.id,
this.name,
this.description,
@@ -484,8 +484,8 @@ class CreateManyTaskDboAndReturnOutputType {
this.project,
});
factory CreateManyTaskDboAndReturnOutputType.fromJson(Map json) =>
CreateManyTaskDboAndReturnOutputType(
factory CreateManyProjectTaskDboAndReturnOutputType.fromJson(Map json) =>
CreateManyProjectTaskDboAndReturnOutputType(
id: json['id'],
name: json['name'],
description: json['description'],
File diff suppressed because it is too large Load Diff
@@ -7,18 +7,6 @@ import 'package:fpdart/fpdart.dart';
import 'package:orm/orm.dart';
class ProjectDboMapper {
TaskEither<IError, ProjectDbo> toDbo(Project project) {
return TaskEither.of(ProjectDbo(
id: project.id,
name: project.name,
description: project.description,
clientId: project.clientId,
userId: project.userId,
createdAt: project.createdAt,
updatedAt: project.updatedAt,
));
}
TaskEither<IError, Project> fromDbo(ProjectDbo dbo) {
return TaskEither.of(Project(
id: dbo.id!,
@@ -31,9 +19,14 @@ class ProjectDboMapper {
));
}
TaskEither<IError, List<Project>> listFrom(Iterable<ProjectDbo> dbos) {
return TaskEither.traverseList(dbos.toList(), fromDbo);
}
TaskEither<IError, ProjectDboCreateInput> fromCreatetoDbo(
ProjectCreate project) {
return TaskEither.of(ProjectDboCreateInput(
id: project.id,
name: project.name,
description: project.description.let(PrismaUnion.$1),
clientId: project.clientId.let(PrismaUnion.$1),
@@ -57,8 +50,4 @@ class ProjectDboMapper {
),
));
}
TaskEither<IError, List<Project>> listFrom(Iterable<ProjectDbo> dbos) {
return TaskEither.traverseList(dbos.toList(), fromDbo);
}
}
@@ -0,0 +1,52 @@
import 'package:backend_dart/common/extensions.dart';
import 'package:backend_dart/domain/entities/project_task.dart';
import 'package:backend_dart/domain/interface/error.dart';
import 'package:backend_dart/infrastructure/persistence/db/model.dart';
import 'package:backend_dart/infrastructure/persistence/db/prisma.dart';
import 'package:fpdart/fpdart.dart';
import 'package:orm/orm.dart';
class ProjectTaskDboMapper {
TaskEither<IError, ProjectTask> from(ProjectTaskDbo target) =>
TaskEither.of(ProjectTask(
id: target.id!,
name: target.name!,
description: target.description,
projectId: target.projectId!,
createdAt: target.createdAt!,
updatedAt: target.updatedAt!,
));
TaskEither<IError, List<ProjectTask>> listFrom(
Iterable<ProjectTaskDbo> targets) {
return TaskEither.traverseList(targets.toList(), from);
}
TaskEither<IError, ProjectTaskDboCreateInput> fromCreateTo(
ProjectTaskCreate origin) =>
TaskEither.of(ProjectTaskDboCreateInput(
id: origin.id,
name: origin.name,
description: origin.description.let(PrismaUnion.$1),
project: ProjectDboCreateNestedOneWithoutTasksInput(
connect: ProjectDboWhereUniqueInput(
id: origin.projectId,
),
),
));
TaskEither<IError, ProjectTaskDboUpdateInput> fromUpdateTo(
ProjectTaskUpdate origin) =>
TaskEither.of(ProjectTaskDboUpdateInput(
id: PrismaUnion.$1(origin.id),
name: origin.name?.let(PrismaUnion.$1),
description: origin.description?.let(PrismaUnion.$1),
project: origin.projectId?.let(
(projectId) => ProjectDboUpdateOneRequiredWithoutTasksNestedInput(
connect: ProjectDboWhereUniqueInput(
id: projectId,
),
),
),
));
}
@@ -0,0 +1,69 @@
import 'package:backend_dart/common/extensions.dart';
import 'package:backend_dart/domain/entities/time_entry.dart';
import 'package:backend_dart/domain/interface/error.dart';
import 'package:backend_dart/infrastructure/persistence/db/model.dart';
import 'package:backend_dart/infrastructure/persistence/db/prisma.dart';
import 'package:fpdart/fpdart.dart';
import 'package:orm/orm.dart';
class TimeEntryDboMapper {
TaskEither<IError, TimeEntry> from(TimeEntryDbo target) => TaskEither.of(
TimeEntry(
id: target.id!,
startTime: target.startTime!,
endTime: target.endTime!,
description: target.description,
userId: target.userId!,
projectId: target.projectId!,
createdAt: target.createdAt!,
updatedAt: target.updatedAt!,
),
);
TaskEither<IError, List<TimeEntry>> listFrom(Iterable<TimeEntryDbo> targets) {
return TaskEither.traverseList(targets.toList(), from);
}
TaskEither<IError, TimeEntryDboCreateInput> fromCreateTo(
TimeEntryCreate origin) =>
TaskEither.of(TimeEntryDboCreateInput(
id: origin.id,
startTime: origin.startTime,
endTime: origin.endTime,
description: origin.description.let(PrismaUnion.$1),
user: UserDboCreateNestedOneWithoutTimeEntriesInput(
connect: UserDboWhereUniqueInput(
id: origin.userId,
),
),
project: ProjectDboCreateNestedOneWithoutTimeEntriesInput(
connect: ProjectDboWhereUniqueInput(
id: origin.projectId,
),
),
));
TaskEither<IError, TimeEntryDboUpdateInput> fromUpdateTo(
TimeEntryUpdate origin) =>
TaskEither.of(TimeEntryDboUpdateInput(
id: PrismaUnion.$1(origin.id),
startTime: origin.startTime?.let(PrismaUnion.$1),
endTime: origin.endTime?.let(PrismaUnion.$1),
description: origin.description?.let(PrismaUnion.$1),
user: origin.userId?.let(
(userId) => UserDboUpdateOneRequiredWithoutTimeEntriesNestedInput(
connect: UserDboWhereUniqueInput(
id: userId,
),
),
),
project: origin.projectId?.let(
(projectId) =>
ProjectDboUpdateOneRequiredWithoutTimeEntriesNestedInput(
connect: ProjectDboWhereUniqueInput(
id: projectId,
),
),
),
));
}
@@ -1,18 +1,37 @@
import 'package:backend_dart/domain/data/database.dart';
import 'package:backend_dart/domain/data/project_data_source.dart';
import 'package:backend_dart/domain/data/project_task_data_source.dart';
import 'package:backend_dart/domain/data/time_entry_data_source.dart';
import 'package:backend_dart/infrastructure/persistence/db/client.dart';
import 'package:backend_dart/infrastructure/persistence/prisma_project_data_source.dart';
import 'package:backend_dart/infrastructure/persistence/prisma_project_task_data_source.dart';
import 'package:backend_dart/infrastructure/persistence/prisma_time_entry_data_source.dart';
import 'package:backend_dart/infrastructure/persistence/prisma_user_data_source.dart';
class PrismaDatabase implements IDatabase {
final prisma = PrismaClient();
late final PrismaUserDataSource _users;
late final TimeEntryDataSource _timeEntries;
late final ProjectTaskDataSource _tasks;
late final ProjectDataSource _projects;
PrismaDatabase() {
_users = PrismaUserDataSource(prisma);
_timeEntries = PrismaTimeEntryDataSource(prisma);
_tasks = PrismaProjectTaskDataSource(prisma);
_projects = PrismaProjectDataSource(prisma);
print('Database initialized');
}
@override
get users => _users;
@override
get timeEntries => _timeEntries;
@override
get tasks => _tasks;
@override
get projects => _projects;
@override
Future<void> close() {
return Future.value();
}
@@ -9,6 +9,7 @@ import 'package:backend_dart/infrastructure/persistence/db/prisma.dart';
import 'package:backend_dart/infrastructure/persistence/mapper/project_dbo_mapper.dart';
import 'package:fpdart/fpdart.dart';
import 'package:orm/orm.dart';
import 'package:uuid/uuid.dart';
class PrismaProjectDataSource implements ProjectDataSource {
final PrismaClient prisma;
@@ -17,7 +18,7 @@ class PrismaProjectDataSource implements ProjectDataSource {
PrismaProjectDataSource(this.prisma);
@override
TaskEither<IError, Project> createProject(ProjectCreate project) {
TaskEither<IError, Project> create(ProjectCreate project) {
return mapper
.fromCreatetoDbo(project)
.flatMap((projectDbo) => TaskEither.tryCatch(
@@ -34,7 +35,7 @@ class PrismaProjectDataSource implements ProjectDataSource {
}
@override
TaskEither<IError, Project> findProjectById(String id) {
TaskEither<IError, Project> findById(String id) {
return TaskEither<IError, ProjectDbo?>.tryCatch(
() async {
final project = await prisma.projectDbo
@@ -51,7 +52,7 @@ class PrismaProjectDataSource implements ProjectDataSource {
}
@override
TaskEither<IError, List<Project>> findProjectsByUserId(String userId) {
TaskEither<IError, List<Project>> findByUserId(String userId) {
return TaskEither<IError, Iterable<ProjectDbo>>.tryCatch(
() async {
final projects = await prisma.projectDbo.findMany(
@@ -69,7 +70,7 @@ class PrismaProjectDataSource implements ProjectDataSource {
}
@override
TaskEither<IError, Project> updateProject(ProjectUpdate project) {
TaskEither<IError, Project> update(ProjectUpdate project) {
return mapper
.fromUpdateToDbo(project)
.flatMap(
@@ -96,7 +97,7 @@ class PrismaProjectDataSource implements ProjectDataSource {
}
@override
TaskEither<IError, Project> deleteProject(String id) {
TaskEither<IError, Project> delete(String id) {
return TaskEither<IError, ProjectDbo?>.tryCatch(
() async {
return await prisma.projectDbo
@@ -117,7 +118,7 @@ class PrismaProjectDataSource implements ProjectDataSource {
}
@override
TaskEither<IError, List<Project>> findAllProjects() {
TaskEither<IError, List<Project>> findAll() {
return TaskEither<IError, Iterable<ProjectDbo>>.tryCatch(
() async => await prisma.projectDbo.findMany(),
(error, _) => AppError.databaseError(
@@ -125,4 +126,23 @@ class PrismaProjectDataSource implements ProjectDataSource {
),
).flatMap(mapper.listFrom);
}
@override
TaskEither<IError, String> generateId() {
return TaskEither.tryCatch(
() async {
var uuid = Uuid();
do {
final id = uuid.v4();
final project = await prisma.projectDbo.findUnique(
where: ProjectDboWhereUniqueInput(id: id),
);
if (project == null) return id;
} while (true);
},
(error, _) => AppError.databaseError(
message: 'Failed to generate ID: ${error.toString()}',
),
);
}
}
@@ -0,0 +1,139 @@
import 'package:backend_dart/common/error_on_null.dart';
import 'package:backend_dart/domain/data/project_task_data_source.dart';
import 'package:backend_dart/domain/entities/project_task.dart';
import 'package:backend_dart/domain/errors/app_error.dart';
import 'package:backend_dart/domain/interface/error.dart';
import 'package:backend_dart/infrastructure/persistence/db/client.dart';
import 'package:backend_dart/infrastructure/persistence/db/model.dart';
import 'package:backend_dart/infrastructure/persistence/db/prisma.dart';
import 'package:backend_dart/infrastructure/persistence/mapper/project_task_dbo_mapper.dart';
import 'package:fpdart/fpdart.dart';
import 'package:orm/orm.dart';
import 'package:uuid/uuid.dart';
class PrismaProjectTaskDataSource implements ProjectTaskDataSource {
final PrismaClient prisma;
final ProjectTaskDboMapper mapper = ProjectTaskDboMapper();
PrismaProjectTaskDataSource(this.prisma);
@override
TaskEither<IError, ProjectTask> create(ProjectTaskCreate task) =>
mapper.fromCreateTo(task).flatMap(
(taskDbo) => TaskEither<IError, ProjectTaskDbo>.tryCatch(
() async {
final createdTask = await prisma.projectTaskDbo.create(
data: PrismaUnion.$1(taskDbo),
);
return createdTask;
},
(error, _) => AppError.databaseError(
message: 'Failed to create project task: ${error.toString()}',
),
).flatMap(mapper.from),
);
@override
TaskEither<IError, ProjectTask> findById(String id) {
return TaskEither<IError, ProjectTaskDbo?>.tryCatch(
() async {
final task = await prisma.projectTaskDbo
.findUnique(where: ProjectTaskDboWhereUniqueInput(id: id));
return task;
},
(error, _) => AppError.databaseError(
message: 'Failed to find project task by ID: ${error.toString()}',
),
)
.flatMap(errorOnNull(AppError.notFound(
"Project task with id $id not found",
)))
.flatMap(mapper.from);
}
@override
TaskEither<IError, List<ProjectTask>> findByProjectId(String projectId) {
return TaskEither<IError, Iterable<ProjectTaskDbo>>.tryCatch(
() async => await prisma.projectTaskDbo.findMany(
where: ProjectTaskDboWhereInput(projectId: PrismaUnion.$2(projectId)),
),
(error, _) => AppError.databaseError(
message:
'Failed to fetch tasks for project $projectId: ${error.toString()}',
),
).flatMap(mapper.listFrom);
}
@override
TaskEither<IError, ProjectTask> update(ProjectTaskUpdate task) => mapper
.fromUpdateTo(task)
.flatMap(
(taskDbo) => TaskEither.tryCatch(
() async {
final updatedTask = await prisma.projectTaskDbo.update(
data: PrismaUnion.$1(taskDbo),
where: ProjectTaskDboWhereUniqueInput(id: task.id),
);
return updatedTask;
},
(error, _) => AppError.databaseError(
message: 'Failed to update project task: ${error.toString()}',
),
),
)
.flatMap(
errorOnNull(AppError.notFound("Project task not found")),
)
.flatMap(mapper.from);
@override
TaskEither<IError, ProjectTask> delete(String id) {
return TaskEither<IError, ProjectTaskDbo?>.tryCatch(
() async {
return await prisma.projectTaskDbo.delete(
where: ProjectTaskDboWhereUniqueInput(id: id),
);
},
(error, _) => AppError.databaseError(
message: 'Failed to delete project task: ${error.toString()}',
),
)
.flatMap(
errorOnNull(
AppError.notFound(
'Project task with ID $id not found',
),
),
)
.flatMap(mapper.from);
}
@override
TaskEither<IError, List<ProjectTask>> findAll() {
return TaskEither<IError, Iterable<ProjectTaskDbo>>.tryCatch(
() async => await prisma.projectTaskDbo.findMany(),
(error, _) => AppError.databaseError(
message: 'Failed to fetch all project tasks: ${error.toString()}',
),
).flatMap(mapper.listFrom);
}
@override
TaskEither<IError, String> generateId() {
return TaskEither.tryCatch(
() async {
var uuid = Uuid();
do {
final id = uuid.v4();
final task = await prisma.projectTaskDbo.findUnique(
where: ProjectTaskDboWhereUniqueInput(id: id),
);
if (task == null) return id;
} while (true);
},
(error, _) => AppError.databaseError(
message: 'Failed to generate ID: ${error.toString()}',
),
);
}
}
@@ -0,0 +1,150 @@
import 'package:backend_dart/common/error_on_null.dart';
import 'package:backend_dart/domain/data/time_entry_data_source.dart';
import 'package:backend_dart/domain/entities/time_entry.dart';
import 'package:backend_dart/domain/errors/app_error.dart';
import 'package:backend_dart/domain/interface/error.dart';
import 'package:backend_dart/infrastructure/persistence/db/client.dart';
import 'package:backend_dart/infrastructure/persistence/db/model.dart';
import 'package:backend_dart/infrastructure/persistence/db/prisma.dart';
import 'package:backend_dart/infrastructure/persistence/mapper/time_entry_dbo_mapper.dart';
import 'package:fpdart/fpdart.dart';
import 'package:orm/orm.dart';
import 'package:uuid/uuid.dart';
class PrismaTimeEntryDataSource implements TimeEntryDataSource {
final PrismaClient prisma;
final TimeEntryDboMapper mapper = TimeEntryDboMapper();
PrismaTimeEntryDataSource(this.prisma);
@override
TaskEither<IError, TimeEntry> create(TimeEntryCreate timeEntry) =>
mapper.fromCreateTo(timeEntry).flatMap(
(timeEntryDbo) => TaskEither<IError, TimeEntryDbo>.tryCatch(
() async {
final createdEntry = await prisma.timeEntryDbo.create(
data: PrismaUnion.$1(timeEntryDbo),
);
return createdEntry;
},
(error, _) => AppError.databaseError(
message: 'Failed to create time entry: ${error.toString()}',
),
).flatMap(mapper.from),
);
@override
TaskEither<IError, TimeEntry> findById(String id) {
return TaskEither<IError, TimeEntryDbo?>.tryCatch(
() async {
final timeEntry = await prisma.timeEntryDbo
.findUnique(where: TimeEntryDboWhereUniqueInput(id: id));
return timeEntry;
},
(error, _) => AppError.databaseError(
message: 'Failed to find time entry by ID: ${error.toString()}',
),
)
.flatMap(errorOnNull(AppError.notFound(
"Time entry with id $id not found",
)))
.flatMap(mapper.from);
}
@override
TaskEither<IError, List<TimeEntry>> findByUserId(String userId) {
return TaskEither<IError, Iterable<TimeEntryDbo>>.tryCatch(
() async => await prisma.timeEntryDbo.findMany(
where: TimeEntryDboWhereInput(userId: PrismaUnion.$2(userId)),
),
(error, _) => AppError.databaseError(
message:
'Failed to fetch time entries for user $userId: ${error.toString()}',
),
).flatMap(mapper.listFrom);
}
@override
TaskEither<IError, List<TimeEntry>> findByProjectId(String projectId) {
return TaskEither<IError, Iterable<TimeEntryDbo>>.tryCatch(
() async => await prisma.timeEntryDbo.findMany(
where: TimeEntryDboWhereInput(projectId: PrismaUnion.$2(projectId)),
),
(error, _) => AppError.databaseError(
message:
'Failed to fetch time entries for project $projectId: ${error.toString()}',
),
).flatMap(mapper.listFrom);
}
@override
TaskEither<IError, TimeEntry> update(TimeEntryUpdate timeEntry) => mapper
.fromUpdateTo(timeEntry)
.flatMap(
(timeEntryDbo) => TaskEither.tryCatch(
() async {
final updatedEntry = await prisma.timeEntryDbo.update(
data: PrismaUnion.$1(timeEntryDbo),
where: TimeEntryDboWhereUniqueInput(id: timeEntry.id),
);
return updatedEntry;
},
(error, _) => AppError.databaseError(
message: 'Failed to update time entry: ${error.toString()}',
),
),
)
.flatMap(
errorOnNull(AppError.notFound("Time entry not found")),
)
.flatMap(mapper.from);
@override
TaskEither<IError, TimeEntry> delete(String id) {
return TaskEither<IError, TimeEntryDbo?>.tryCatch(
() async {
return await prisma.timeEntryDbo.delete(
where: TimeEntryDboWhereUniqueInput(id: id),
);
},
(error, _) => AppError.databaseError(
message: 'Failed to delete time entry: ${error.toString()}',
),
)
.flatMap(
errorOnNull(AppError.notFound(
"Time entry with id $id not found",
)),
)
.flatMap(mapper.from);
}
@override
TaskEither<IError, List<TimeEntry>> findAll() {
return TaskEither<IError, Iterable<TimeEntryDbo>>.tryCatch(
() async => await prisma.timeEntryDbo.findMany(),
(error, _) => AppError.databaseError(
message: 'Failed to fetch all time entries: ${error.toString()}',
),
).flatMap(mapper.listFrom);
}
@override
TaskEither<IError, String> generateId() {
return TaskEither.tryCatch(
() async {
var uuid = Uuid();
do {
final id = uuid.v4();
final entry = await prisma.timeEntryDbo.findUnique(
where: TimeEntryDboWhereUniqueInput(id: id),
);
if (entry == null) return id;
} while (true);
},
(error, _) => AppError.databaseError(
message: 'Failed to generate ID: ${error.toString()}',
),
);
}
}