Make the DB type object generic (not PmApiDb).
This commit is contained in:
parent
126c4f1c7c
commit
934bb26cf3
@ -76,7 +76,7 @@ template findRecordsBy*(db: DbConn, modelType: type, lookups: seq[tuple[field: s
|
|||||||
lookups.mapIt(it.value))
|
lookups.mapIt(it.value))
|
||||||
.mapIt(rowToModel(modelType, it))
|
.mapIt(rowToModel(modelType, it))
|
||||||
|
|
||||||
macro generateProcsForModels*(modelTypes: openarray[type]): untyped =
|
macro generateProcsForModels*(dbType: type, modelTypes: openarray[type]): untyped =
|
||||||
result = newStmtList()
|
result = newStmtList()
|
||||||
|
|
||||||
for t in modelTypes:
|
for t in modelTypes:
|
||||||
@ -89,22 +89,22 @@ macro generateProcsForModels*(modelTypes: openarray[type]): untyped =
|
|||||||
let deleteName = ident("delete" & modelName)
|
let deleteName = ident("delete" & modelName)
|
||||||
let idType = typeOfColumn(t, "id")
|
let idType = typeOfColumn(t, "id")
|
||||||
result.add quote do:
|
result.add quote do:
|
||||||
proc `getName`*(db: PMApiDb, id: `idType`): `t` = getRecord(db.conn, `t`, id)
|
proc `getName`*(db: `dbType`, id: `idType`): `t` = getRecord(db.conn, `t`, id)
|
||||||
proc `getAllName`*(db: PMApiDb): seq[`t`] = getAllRecords(db.conn, `t`)
|
proc `getAllName`*(db: `dbType`): seq[`t`] = getAllRecords(db.conn, `t`)
|
||||||
proc `findWhereName`*(db: PMApiDb, whereClause: string, values: varargs[string, dbFormat]): seq[`t`] =
|
proc `findWhereName`*(db: `dbType`, whereClause: string, values: varargs[string, dbFormat]): seq[`t`] =
|
||||||
return findRecordsWhere(db.conn, `t`, whereClause, values)
|
return findRecordsWhere(db.conn, `t`, whereClause, values)
|
||||||
proc `createName`*(db: PMApiDb, rec: `t`): `t` = createRecord(db.conn, rec)
|
proc `createName`*(db: `dbType`, rec: `t`): `t` = createRecord(db.conn, rec)
|
||||||
proc `updateName`*(db: PMApiDb, rec: `t`): bool = updateRecord(db.conn, rec)
|
proc `updateName`*(db: `dbType`, rec: `t`): bool = updateRecord(db.conn, rec)
|
||||||
proc `deleteName`*(db: PMApiDb, rec: `t`): bool = deleteRecord(db.conn, rec)
|
proc `deleteName`*(db: `dbType`, rec: `t`): bool = deleteRecord(db.conn, rec)
|
||||||
proc `deleteName`*(db: PMApiDb, id: `idType`): bool = deleteRecord(db.conn, `t`, id)
|
proc `deleteName`*(db: `dbType`, id: `idType`): bool = deleteRecord(db.conn, `t`, id)
|
||||||
|
|
||||||
macro generateLookup*(modelType: type, fields: seq[string]): untyped =
|
macro generateLookup*(dbType: type, modelType: type, fields: seq[string]): untyped =
|
||||||
let fieldNames = fields[1].mapIt($it)
|
let fieldNames = fields[1].mapIt($it)
|
||||||
let procName = ident("find" & $modelType.getType[1] & "sBy" & fieldNames.mapIt(it.capitalize).join("And"))
|
let procName = ident("find" & $modelType.getType[1] & "sBy" & fieldNames.mapIt(it.capitalize).join("And"))
|
||||||
|
|
||||||
# Create proc skeleton
|
# Create proc skeleton
|
||||||
result = quote do:
|
result = quote do:
|
||||||
proc `procName`*(db: PMApiDb): seq[`modelType`] =
|
proc `procName`*(db: `dbType`): seq[`modelType`] =
|
||||||
return findRecordsBy(db.conn, `modelType`)
|
return findRecordsBy(db.conn, `modelType`)
|
||||||
|
|
||||||
var callParams = quote do: @[]
|
var callParams = quote do: @[]
|
||||||
@ -120,7 +120,7 @@ macro generateLookup*(modelType: type, fields: seq[string]): untyped =
|
|||||||
|
|
||||||
result[6][0][0].add(callParams)
|
result[6][0][0].add(callParams)
|
||||||
|
|
||||||
macro generateProcsForFieldLookups*(modelsAndFields: openarray[tuple[t: type, fields: seq[string]]]): untyped =
|
macro generateProcsForFieldLookups*(dbType: type, modelsAndFields: openarray[tuple[t: type, fields: seq[string]]]): untyped =
|
||||||
result = newStmtList()
|
result = newStmtList()
|
||||||
|
|
||||||
for i in modelsAndFields:
|
for i in modelsAndFields:
|
||||||
@ -131,7 +131,7 @@ macro generateProcsForFieldLookups*(modelsAndFields: openarray[tuple[t: type, fi
|
|||||||
|
|
||||||
# Create proc skeleton
|
# Create proc skeleton
|
||||||
let procDefAST = quote do:
|
let procDefAST = quote do:
|
||||||
proc `procName`*(db: PMApiDb): seq[`modelType`] =
|
proc `procName`*(db: `dbType`): seq[`modelType`] =
|
||||||
return findRecordsBy(db.conn, `modelType`)
|
return findRecordsBy(db.conn, `modelType`)
|
||||||
|
|
||||||
var callParams = quote do: @[]
|
var callParams = quote do: @[]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user