-import * as Sequelize from 'sequelize'
+import { AllowNull, Column, CreatedAt, DataType, HasMany, Model, Table, UpdatedAt } from 'sequelize-typescript'
+import { OAuthTokenModel } from './oauth-token'
-import { addMethodsToModel } from '../utils'
-import {
- OAuthClientInstance,
- OAuthClientAttributes,
-
- OAuthClientMethods
-} from './oauth-client-interface'
-
-let OAuthClient: Sequelize.Model<OAuthClientInstance, OAuthClientAttributes>
-let countTotal: OAuthClientMethods.CountTotal
-let loadFirstClient: OAuthClientMethods.LoadFirstClient
-let getByIdAndSecret: OAuthClientMethods.GetByIdAndSecret
-
-export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) {
- OAuthClient = sequelize.define<OAuthClientInstance, OAuthClientAttributes>('OAuthClient',
+@Table({
+ tableName: 'oAuthClient',
+ indexes: [
{
- clientId: {
- type: DataTypes.STRING,
- allowNull: false
- },
- clientSecret: {
- type: DataTypes.STRING,
- allowNull: false
- },
- grants: {
- type: DataTypes.ARRAY(DataTypes.STRING)
- },
- redirectUris: {
- type: DataTypes.ARRAY(DataTypes.STRING)
- }
+ fields: [ 'clientId' ],
+ unique: true
},
{
- indexes: [
- {
- fields: [ 'clientId' ],
- unique: true
- },
- {
- fields: [ 'clientId', 'clientSecret' ],
- unique: true
- }
- ]
+ fields: [ 'clientId', 'clientSecret' ],
+ unique: true
}
- )
+ ]
+})
+export class OAuthClientModel extends Model<OAuthClientModel> {
- const classMethods = [
- associate,
+ @AllowNull(false)
+ @Column
+ clientId: string
- countTotal,
- getByIdAndSecret,
- loadFirstClient
- ]
- addMethodsToModel(OAuthClient, classMethods)
+ @AllowNull(false)
+ @Column
+ clientSecret: string
- return OAuthClient
-}
+ @Column(DataType.ARRAY(DataType.STRING))
+ grants: string[]
+
+ @Column(DataType.ARRAY(DataType.STRING))
+ redirectUris: string[]
+
+ @CreatedAt
+ createdAt: Date
-// ---------------------------------------------------------------------------
+ @UpdatedAt
+ updatedAt: Date
-function associate (models) {
- OAuthClient.hasMany(models.OAuthToken, {
- foreignKey: 'oAuthClientId',
+ @HasMany(() => OAuthTokenModel, {
onDelete: 'cascade'
})
-}
+ OAuthTokens: OAuthTokenModel[]
-countTotal = function () {
- return OAuthClient.count()
-}
+ static countTotal () {
+ return OAuthClientModel.count()
+ }
-loadFirstClient = function () {
- return OAuthClient.findOne()
-}
+ static loadFirstClient () {
+ return OAuthClientModel.findOne()
+ }
-getByIdAndSecret = function (clientId: string, clientSecret: string) {
- const query = {
- where: {
- clientId: clientId,
- clientSecret: clientSecret
+ static getByIdAndSecret (clientId: string, clientSecret: string) {
+ const query = {
+ where: {
+ clientId: clientId,
+ clientSecret: clientSecret
+ }
}
- }
- return OAuthClient.findOne(query)
+ return OAuthClientModel.findOne(query)
+ }
}