Skip to content

Commit

Permalink
refactor: remove $refs in favor of $columns and rename $columns to $c…
Browse files Browse the repository at this point in the history
…olumnDefinitions
  • Loading branch information
thetutlage committed Jan 17, 2020
1 parent a8f1383 commit 71ee4c8
Show file tree
Hide file tree
Showing 6 changed files with 167 additions and 91 deletions.
52 changes: 29 additions & 23 deletions adonis-typings/model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -328,17 +328,23 @@ declare module '@ioc:Adonis/Lucid/Model' {
/**
* A map of defined columns
*/
$columns: Map<string, ColumnOptions>
$columnsDefinitions: Map<string, ColumnOptions>

/**
* A map of defined relationships
*/
$relations: Map<string, RelationshipsContract>
$relationsDefinitions: Map<string, RelationshipsContract>

/**
* A map of computed properties
*/
$computed: Map<string, ComputedOptions>
$computedDefinitions: Map<string, ComputedOptions>

/**
* Columns is a property to get type information for model
* attributes. This must be declared by the end user
*/
$columns: any

/**
* The primary key for finding unique referencing to a
Expand Down Expand Up @@ -372,12 +378,6 @@ declare module '@ioc:Adonis/Lucid/Model' {
*/
table: string

/**
* Refs are named value pair on model used mainly for autocompleting
* the query constraints
*/
$refs: { [key: string]: string }

/**
* Creating model from adapter results
*/
Expand Down Expand Up @@ -443,6 +443,12 @@ declare module '@ioc:Adonis/Lucid/Model' {
$resolveCastKey (key: string): string
$mapKeysToCastKeys (values: ModelObject): ModelObject

/**
* Resolve keys to their model column properties
*/
$resolveColumnName (key: string): string
$mapsKeysToColumnNames (values: ModelObject): ModelObject

boot (): void

/**
Expand All @@ -468,7 +474,7 @@ declare module '@ioc:Adonis/Lucid/Model' {
*/
create<T extends ModelConstructorContract> (
this: T,
values: ModelObject,
values: Partial<T['$columns']>,
options?: ModelAdapterOptions,
): Promise<InstanceType<T>>

Expand All @@ -477,7 +483,7 @@ declare module '@ioc:Adonis/Lucid/Model' {
*/
createMany<T extends ModelConstructorContract> (
this: T,
values: ModelObject[],
values: Partial<T['$columns']>[],
options?: ModelAdapterOptions,
): Promise<InstanceType<T>[]>

Expand Down Expand Up @@ -514,8 +520,8 @@ declare module '@ioc:Adonis/Lucid/Model' {
*/
firstOrNew<T extends ModelConstructorContract> (
this: T,
search: any,
savePayload?: any,
search: Partial<T['$columns']>,
savePayload?: Partial<T['$columns']>,
options?: ModelAdapterOptions,
): Promise<InstanceType<T>>

Expand All @@ -524,8 +530,8 @@ declare module '@ioc:Adonis/Lucid/Model' {
*/
firstOrCreate<T extends ModelConstructorContract> (
this: T,
search: any,
savePayload?: any,
search: Partial<T['$columns']>,
savePayload?: Partial<T['$columns']>,
options?: ModelAdapterOptions,
): Promise<InstanceType<T>>

Expand All @@ -535,8 +541,8 @@ declare module '@ioc:Adonis/Lucid/Model' {
*/
fetchOrNewUpMany<T extends ModelConstructorContract> (
this: T,
uniqueKey: string,
payload: ModelObject[],
uniqueKey: keyof T['$columns'],
payload: Partial<T['$columns']>[],
options?: ModelAdapterOptions,
mergeAttributes?: boolean,
): Promise<InstanceType<T>[]>
Expand All @@ -547,8 +553,8 @@ declare module '@ioc:Adonis/Lucid/Model' {
*/
fetchOrCreateMany<T extends ModelConstructorContract> (
this: T,
uniqueKey: string,
payload: ModelObject[],
uniqueKey: keyof T['$columns'],
payload: Partial<T['$columns']>[],
options?: ModelAdapterOptions,
): Promise<InstanceType<T>[]>

Expand All @@ -557,8 +563,8 @@ declare module '@ioc:Adonis/Lucid/Model' {
*/
updateOrCreate<T extends ModelConstructorContract> (
this: T,
search: any,
updatePayload: any,
search: Partial<T['$columns']>,
updatePayload: Partial<T['$columns']>,
options?: ModelAdapterOptions,
): Promise<InstanceType<T>>

Expand All @@ -567,8 +573,8 @@ declare module '@ioc:Adonis/Lucid/Model' {
*/
updateOrCreateMany<T extends ModelConstructorContract> (
this: T,
uniqueKey: string,
payload: ModelObject[],
uniqueKey: keyof T['$columns'],
payload: Partial<T['$columns']>[],
options?: ModelAdapterOptions,
): Promise<InstanceType<T>[]>

Expand Down
29 changes: 23 additions & 6 deletions adonis-typings/relations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -424,9 +424,20 @@ declare module '@ioc:Adonis/Lucid/Relations' {
RelatedModel extends ModelConstructorContract
> extends RelationBaseQueryClientContract<Relation, Model, RelatedModel> {
save (related: InstanceType<RelatedModel>): Promise<void>
create (values: ModelObject): Promise<InstanceType<RelatedModel>>
firstOrCreate (search: ModelObject, savePayload?: ModelObject): Promise<InstanceType<RelatedModel>>
updateOrCreate (search: ModelObject, updatePayload: ModelObject): Promise<InstanceType<RelatedModel>>

create (
values: Partial<RelatedModel['$columns']>,
): Promise<InstanceType<RelatedModel>>

firstOrCreate (
search: Partial<RelatedModel['$columns']>,
savePayload?: Partial<RelatedModel['$columns']>,
): Promise<InstanceType<RelatedModel>>

updateOrCreate (
search: ModelObject,
updatePayload: ModelObject,
): Promise<InstanceType<RelatedModel>>
}

/**
Expand All @@ -439,7 +450,7 @@ declare module '@ioc:Adonis/Lucid/Relations' {
RelatedModel extends ModelConstructorContract
> extends HasOneClientContract<Relation, Model, RelatedModel> {
saveMany (related: InstanceType<RelatedModel>[]): Promise<void>
createMany (values: ModelObject[]): Promise<InstanceType<RelatedModel>[]>
createMany (values: Partial<RelatedModel['$columns']>[]): Promise<InstanceType<RelatedModel>[]>
}

/**
Expand Down Expand Up @@ -497,12 +508,18 @@ declare module '@ioc:Adonis/Lucid/Relations' {
/**
* Create related model instance
*/
create (values: ModelObject, checkExisting?: boolean): Promise<InstanceType<RelatedModel>>
create (
values: Partial<RelatedModel['$columns']>,
checkExisting?: boolean,
): Promise<InstanceType<RelatedModel>>

/**
* Create many of related model instances
*/
createMany (values: ModelObject[], checkExisting?: boolean): Promise<InstanceType<RelatedModel>[]>
createMany (
values: Partial<RelatedModel['$columns']>[],
checkExisting?: boolean,
): Promise<InstanceType<RelatedModel>[]>

/**
* Attach new pivot rows
Expand Down
13 changes: 13 additions & 0 deletions example/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { BaseModel } from '@ioc:Adonis/Lucid/Orm'

class User extends BaseModel {
public id: string
public username: string
public static $refs: Pick<User, 'id' | 'username'>
}

User.create({ id: '1' })
User.fetchOrCreateMany('id', [{ id: '1', username: 'virk' }])
User.create({ id: '1', username: 'virk' })
// User.create({ id: '1', username: 22 })
User.create({ id: '1' })
4 changes: 3 additions & 1 deletion src/Orm/Adapter/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,9 @@ export class Adapter implements AdapterContract {

const result = await query.insert(attributes)
if (modelConstructor.increments) {
instance.$consumeAdapterResult({ [modelConstructor.$refs[modelConstructor.primaryKey]]: result[0] })
instance.$consumeAdapterResult({
[modelConstructor.$resolveColumnName(modelConstructor.primaryKey)]: result[0],
})
}
}

Expand Down
Loading

0 comments on commit 71ee4c8

Please sign in to comment.