@recursyve/nestjs-unique-codes-sequelize 8.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adapters/index.d.ts +1 -0
- package/adapters/index.js +4 -0
- package/adapters/sequelize.adapter.d.ts +5 -0
- package/adapters/sequelize.adapter.js +16 -0
- package/index.d.ts +3 -0
- package/index.js +6 -0
- package/models/index.d.ts +1 -0
- package/models/index.js +5 -0
- package/models/unique-codes.model.d.ts +12 -0
- package/models/unique-codes.model.js +53 -0
- package/package.json +25 -0
- package/repositories/database-read.repository.d.ts +12 -0
- package/repositories/database-read.repository.js +27 -0
- package/repositories/database.repository.d.ts +11 -0
- package/repositories/database.repository.js +37 -0
- package/sequelize-platform.module.d.ts +4 -0
- package/sequelize-platform.module.js +36 -0
- package/services/unique-codes.service.d.ts +13 -0
- package/services/unique-codes.service.js +86 -0
- package/utils/sequelize-migration.utils.d.ts +1 -0
- package/utils/sequelize-migration.utils.js +32 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./sequelize.adapter";
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SequelizeAdapter = void 0;
|
|
4
|
+
const nestjs_unique_codes_core_1 = require("@recursyve/nestjs-unique-codes-core");
|
|
5
|
+
const sequelize_platform_module_1 = require("../sequelize-platform.module");
|
|
6
|
+
class SequelizeAdapter extends nestjs_unique_codes_core_1.DatabaseAdapter {
|
|
7
|
+
forRoot() {
|
|
8
|
+
return {
|
|
9
|
+
module: sequelize_platform_module_1.SequelizePlatformModule,
|
|
10
|
+
imports: [
|
|
11
|
+
sequelize_platform_module_1.SequelizePlatformModule.forRoot()
|
|
12
|
+
]
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.SequelizeAdapter = SequelizeAdapter;
|
package/index.d.ts
ADDED
package/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./adapters"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./models"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./sequelize-platform.module"), exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { SequelizeUniqueCodes } from "./unique-codes.model";
|
package/models/index.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SequelizeUniqueCodes = void 0;
|
|
4
|
+
var unique_codes_model_1 = require("./unique-codes.model");
|
|
5
|
+
Object.defineProperty(exports, "SequelizeUniqueCodes", { enumerable: true, get: function () { return unique_codes_model_1.SequelizeUniqueCodes; } });
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { UniqueCodes } from "@recursyve/nestjs-unique-codes-core";
|
|
2
|
+
import { Model } from "sequelize-typescript";
|
|
3
|
+
export declare class SequelizeUniqueCodes extends Model implements UniqueCodes {
|
|
4
|
+
id: number;
|
|
5
|
+
code: string;
|
|
6
|
+
metadata: Record<string, any>;
|
|
7
|
+
validAt: Date;
|
|
8
|
+
expiresAt: Date;
|
|
9
|
+
availableUsageCount: number;
|
|
10
|
+
usages: Record<string, any>[];
|
|
11
|
+
type: string;
|
|
12
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SequelizeUniqueCodes = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const sequelize_typescript_1 = require("sequelize-typescript");
|
|
6
|
+
const uuid = require("uuid");
|
|
7
|
+
const sequelize_1 = require("sequelize");
|
|
8
|
+
let SequelizeUniqueCodes = class SequelizeUniqueCodes extends sequelize_typescript_1.Model {
|
|
9
|
+
};
|
|
10
|
+
tslib_1.__decorate([
|
|
11
|
+
sequelize_typescript_1.PrimaryKey,
|
|
12
|
+
sequelize_typescript_1.AutoIncrement,
|
|
13
|
+
sequelize_typescript_1.Column,
|
|
14
|
+
tslib_1.__metadata("design:type", Number)
|
|
15
|
+
], SequelizeUniqueCodes.prototype, "id", void 0);
|
|
16
|
+
tslib_1.__decorate([
|
|
17
|
+
(0, sequelize_typescript_1.AllowNull)(false),
|
|
18
|
+
(0, sequelize_typescript_1.Default)(() => uuid.v4()),
|
|
19
|
+
sequelize_typescript_1.Column,
|
|
20
|
+
tslib_1.__metadata("design:type", String)
|
|
21
|
+
], SequelizeUniqueCodes.prototype, "code", void 0);
|
|
22
|
+
tslib_1.__decorate([
|
|
23
|
+
(0, sequelize_typescript_1.Column)(sequelize_1.DataTypes.JSON),
|
|
24
|
+
tslib_1.__metadata("design:type", Object)
|
|
25
|
+
], SequelizeUniqueCodes.prototype, "metadata", void 0);
|
|
26
|
+
tslib_1.__decorate([
|
|
27
|
+
sequelize_typescript_1.Column,
|
|
28
|
+
tslib_1.__metadata("design:type", Date)
|
|
29
|
+
], SequelizeUniqueCodes.prototype, "validAt", void 0);
|
|
30
|
+
tslib_1.__decorate([
|
|
31
|
+
sequelize_typescript_1.Column,
|
|
32
|
+
tslib_1.__metadata("design:type", Date)
|
|
33
|
+
], SequelizeUniqueCodes.prototype, "expiresAt", void 0);
|
|
34
|
+
tslib_1.__decorate([
|
|
35
|
+
(0, sequelize_typescript_1.Default)(1),
|
|
36
|
+
sequelize_typescript_1.Column,
|
|
37
|
+
tslib_1.__metadata("design:type", Number)
|
|
38
|
+
], SequelizeUniqueCodes.prototype, "availableUsageCount", void 0);
|
|
39
|
+
tslib_1.__decorate([
|
|
40
|
+
(0, sequelize_typescript_1.Column)(sequelize_1.DataTypes.JSON),
|
|
41
|
+
tslib_1.__metadata("design:type", Array)
|
|
42
|
+
], SequelizeUniqueCodes.prototype, "usages", void 0);
|
|
43
|
+
tslib_1.__decorate([
|
|
44
|
+
(0, sequelize_typescript_1.AllowNull)(false),
|
|
45
|
+
sequelize_typescript_1.Column,
|
|
46
|
+
tslib_1.__metadata("design:type", String)
|
|
47
|
+
], SequelizeUniqueCodes.prototype, "type", void 0);
|
|
48
|
+
SequelizeUniqueCodes = tslib_1.__decorate([
|
|
49
|
+
(0, sequelize_typescript_1.Table)({
|
|
50
|
+
tableName: "unique_codes"
|
|
51
|
+
})
|
|
52
|
+
], SequelizeUniqueCodes);
|
|
53
|
+
exports.SequelizeUniqueCodes = SequelizeUniqueCodes;
|
package/package.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@recursyve/nestjs-unique-codes-sequelize",
|
|
3
|
+
"version": "8.0.0-beta.1",
|
|
4
|
+
"publishConfig": {
|
|
5
|
+
"access": "public"
|
|
6
|
+
},
|
|
7
|
+
"peerDependencies": {
|
|
8
|
+
"@nestjs/common": "^8.0.0",
|
|
9
|
+
"@nestjs/core": "^8.0.0",
|
|
10
|
+
"@nestjs/sequelize": "^8.0.0",
|
|
11
|
+
"@recursyve/nestjs-unique-codes-core": "^8.0.0-beta.0",
|
|
12
|
+
"date-fns": "^2.28.0",
|
|
13
|
+
"sequelize": "^6.6.0",
|
|
14
|
+
"sequelize-typescript": "^2.1.0"
|
|
15
|
+
},
|
|
16
|
+
"devDependencies": {
|
|
17
|
+
"@nestjs/common": "^8.0.5",
|
|
18
|
+
"@nestjs/core": "^8.0.5",
|
|
19
|
+
"sequelize": "^6.6.5",
|
|
20
|
+
"sequelize-typescript": "^2.1.0",
|
|
21
|
+
"tslint": "^6.1.2",
|
|
22
|
+
"typescript": "^4.3.5"
|
|
23
|
+
},
|
|
24
|
+
"gitHead": "9cef464495d8155c8dff97a6055da3253c899ddf"
|
|
25
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Model } from "sequelize-typescript";
|
|
2
|
+
import { FindOptions, Identifier } from "sequelize";
|
|
3
|
+
declare class M extends Model {
|
|
4
|
+
}
|
|
5
|
+
export declare abstract class UniqueCodeDatabaseReadRepository<T extends Model> {
|
|
6
|
+
protected repository: typeof M;
|
|
7
|
+
protected constructor(repository: typeof M);
|
|
8
|
+
findByPk(identifier: Identifier, options?: FindOptions): Promise<T>;
|
|
9
|
+
findOne(options?: FindOptions): Promise<T>;
|
|
10
|
+
findAll(options?: FindOptions): Promise<T[]>;
|
|
11
|
+
}
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UniqueCodeDatabaseReadRepository = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const sequelize_typescript_1 = require("sequelize-typescript");
|
|
7
|
+
class M extends sequelize_typescript_1.Model {
|
|
8
|
+
}
|
|
9
|
+
let UniqueCodeDatabaseReadRepository = class UniqueCodeDatabaseReadRepository {
|
|
10
|
+
constructor(repository) {
|
|
11
|
+
this.repository = repository;
|
|
12
|
+
}
|
|
13
|
+
findByPk(identifier, options) {
|
|
14
|
+
return this.repository.findByPk(identifier, options);
|
|
15
|
+
}
|
|
16
|
+
findOne(options) {
|
|
17
|
+
return this.repository.findOne(options);
|
|
18
|
+
}
|
|
19
|
+
findAll(options) {
|
|
20
|
+
return this.repository.findAll(options);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
UniqueCodeDatabaseReadRepository = tslib_1.__decorate([
|
|
24
|
+
(0, common_1.Injectable)(),
|
|
25
|
+
tslib_1.__metadata("design:paramtypes", [Object])
|
|
26
|
+
], UniqueCodeDatabaseReadRepository);
|
|
27
|
+
exports.UniqueCodeDatabaseReadRepository = UniqueCodeDatabaseReadRepository;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Model } from "sequelize-typescript";
|
|
2
|
+
import { UniqueCodeDatabaseReadRepository } from "./database-read.repository";
|
|
3
|
+
declare class M extends Model {
|
|
4
|
+
}
|
|
5
|
+
export declare abstract class UniqueCodeDatabaseRepository<T extends Model, CreateDto = Partial<T>, UpdateDto = Partial<T>> extends UniqueCodeDatabaseReadRepository<T> {
|
|
6
|
+
protected constructor(repository: typeof M);
|
|
7
|
+
create(dto: CreateDto | Partial<T>): Promise<T>;
|
|
8
|
+
update(id: number, dto: UpdateDto | Partial<T>): Promise<T>;
|
|
9
|
+
delete(id: number): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UniqueCodeDatabaseRepository = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const sequelize_typescript_1 = require("sequelize-typescript");
|
|
7
|
+
const database_read_repository_1 = require("./database-read.repository");
|
|
8
|
+
class M extends sequelize_typescript_1.Model {
|
|
9
|
+
}
|
|
10
|
+
let UniqueCodeDatabaseRepository = class UniqueCodeDatabaseRepository extends database_read_repository_1.UniqueCodeDatabaseReadRepository {
|
|
11
|
+
constructor(repository) {
|
|
12
|
+
super(repository);
|
|
13
|
+
}
|
|
14
|
+
async create(dto) {
|
|
15
|
+
return await this.repository.create(dto);
|
|
16
|
+
}
|
|
17
|
+
async update(id, dto) {
|
|
18
|
+
const model = await this.findByPk(id);
|
|
19
|
+
if (!model) {
|
|
20
|
+
throw new common_1.HttpException(`Resource not found for id ${id}`, common_1.HttpStatus.NOT_FOUND);
|
|
21
|
+
}
|
|
22
|
+
await model.update(dto);
|
|
23
|
+
return model;
|
|
24
|
+
}
|
|
25
|
+
async delete(id) {
|
|
26
|
+
const model = await this.findByPk(id);
|
|
27
|
+
if (!model) {
|
|
28
|
+
throw new common_1.HttpException(`Resource not found for id ${id}`, common_1.HttpStatus.NOT_FOUND);
|
|
29
|
+
}
|
|
30
|
+
await model.destroy();
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
UniqueCodeDatabaseRepository = tslib_1.__decorate([
|
|
34
|
+
(0, common_1.Injectable)(),
|
|
35
|
+
tslib_1.__metadata("design:paramtypes", [Object])
|
|
36
|
+
], UniqueCodeDatabaseRepository);
|
|
37
|
+
exports.UniqueCodeDatabaseRepository = UniqueCodeDatabaseRepository;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var SequelizePlatformModule_1;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.SequelizePlatformModule = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const common_1 = require("@nestjs/common");
|
|
7
|
+
const sequelize_1 = require("@nestjs/sequelize");
|
|
8
|
+
const models_1 = require("./models");
|
|
9
|
+
const nestjs_unique_codes_core_1 = require("@recursyve/nestjs-unique-codes-core");
|
|
10
|
+
const unique_codes_service_1 = require("./services/unique-codes.service");
|
|
11
|
+
let SequelizePlatformModule = SequelizePlatformModule_1 = class SequelizePlatformModule {
|
|
12
|
+
static forRoot() {
|
|
13
|
+
return {
|
|
14
|
+
module: SequelizePlatformModule_1,
|
|
15
|
+
global: true,
|
|
16
|
+
imports: [
|
|
17
|
+
sequelize_1.SequelizeModule.forFeature([
|
|
18
|
+
models_1.SequelizeUniqueCodes
|
|
19
|
+
])
|
|
20
|
+
],
|
|
21
|
+
providers: [
|
|
22
|
+
{
|
|
23
|
+
provide: nestjs_unique_codes_core_1.UniqueCodesService,
|
|
24
|
+
useFactory: () => new unique_codes_service_1.SequelizeUniqueCodesService(models_1.SequelizeUniqueCodes)
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
exports: [
|
|
28
|
+
nestjs_unique_codes_core_1.UniqueCodesService
|
|
29
|
+
]
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
SequelizePlatformModule = SequelizePlatformModule_1 = tslib_1.__decorate([
|
|
34
|
+
(0, common_1.Module)({})
|
|
35
|
+
], SequelizePlatformModule);
|
|
36
|
+
exports.SequelizePlatformModule = SequelizePlatformModule;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { UniqueCodes, UniqueCodesService } from "@recursyve/nestjs-unique-codes-core";
|
|
2
|
+
import { SequelizeUniqueCodes } from "../models";
|
|
3
|
+
export declare class SequelizeUniqueCodesService extends UniqueCodesService {
|
|
4
|
+
private readonly repository;
|
|
5
|
+
constructor(repository: typeof SequelizeUniqueCodes);
|
|
6
|
+
create(uniqueCode: Partial<UniqueCodes>): Promise<UniqueCodes>;
|
|
7
|
+
getByCode(code: string): Promise<UniqueCodes>;
|
|
8
|
+
findByCode(code: string): Promise<UniqueCodes | null>;
|
|
9
|
+
getByCodeAndType(code: string, type: string): Promise<UniqueCodes>;
|
|
10
|
+
findByCodeAndType(code: string, type: string): Promise<UniqueCodes | null>;
|
|
11
|
+
validate(uniqueCode: string | UniqueCodes): Promise<boolean>;
|
|
12
|
+
use(id: number, metadata?: Record<string, any>): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SequelizeUniqueCodesService = void 0;
|
|
4
|
+
const nestjs_unique_codes_core_1 = require("@recursyve/nestjs-unique-codes-core");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const date_fns_1 = require("date-fns");
|
|
7
|
+
class SequelizeUniqueCodesService extends nestjs_unique_codes_core_1.UniqueCodesService {
|
|
8
|
+
constructor(repository) {
|
|
9
|
+
super();
|
|
10
|
+
this.repository = repository;
|
|
11
|
+
}
|
|
12
|
+
create(uniqueCode) {
|
|
13
|
+
return this.repository.create(uniqueCode);
|
|
14
|
+
}
|
|
15
|
+
async getByCode(code) {
|
|
16
|
+
const uniqueCode = await this.repository.findOne({
|
|
17
|
+
where: {
|
|
18
|
+
code
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
if (!uniqueCode)
|
|
22
|
+
throw new common_1.NotFoundException(`Unique code '${code}' not found`);
|
|
23
|
+
return uniqueCode;
|
|
24
|
+
}
|
|
25
|
+
findByCode(code) {
|
|
26
|
+
return this.repository.findOne({
|
|
27
|
+
where: {
|
|
28
|
+
code
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
async getByCodeAndType(code, type) {
|
|
33
|
+
const uniqueCode = await this.repository.findOne({
|
|
34
|
+
where: {
|
|
35
|
+
code,
|
|
36
|
+
type
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
if (!uniqueCode)
|
|
40
|
+
throw new common_1.NotFoundException(`Unique code '${code}' with type '${type}' not found`);
|
|
41
|
+
return uniqueCode;
|
|
42
|
+
}
|
|
43
|
+
findByCodeAndType(code, type) {
|
|
44
|
+
return this.repository.findOne({
|
|
45
|
+
where: {
|
|
46
|
+
code,
|
|
47
|
+
type
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
async validate(uniqueCode) {
|
|
52
|
+
var _a, _b;
|
|
53
|
+
if (typeof uniqueCode === "string") {
|
|
54
|
+
uniqueCode = await this.getByCode(uniqueCode);
|
|
55
|
+
}
|
|
56
|
+
if (uniqueCode.availableUsageCount <= 0) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
const now = Date.now();
|
|
60
|
+
return (0, date_fns_1.isWithinInterval)(now, {
|
|
61
|
+
start: (_a = uniqueCode.validAt) !== null && _a !== void 0 ? _a : now,
|
|
62
|
+
end: (_b = uniqueCode.expiresAt) !== null && _b !== void 0 ? _b : now
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
async use(id, metadata) {
|
|
66
|
+
var _a;
|
|
67
|
+
const uniqueCode = await this.repository.findByPk(id);
|
|
68
|
+
const isValid = await this.validate(uniqueCode);
|
|
69
|
+
if (!isValid) {
|
|
70
|
+
throw new common_1.BadRequestException(`Unique code ${uniqueCode.code} invalid`);
|
|
71
|
+
}
|
|
72
|
+
const usages = (_a = uniqueCode.usages) !== null && _a !== void 0 ? _a : [];
|
|
73
|
+
usages.push(Object.assign(Object.assign({}, metadata), { usedAt: new Date() }));
|
|
74
|
+
if (uniqueCode.availableUsageCount) {
|
|
75
|
+
await uniqueCode.decrement("availableUsageCount");
|
|
76
|
+
}
|
|
77
|
+
await this.repository.update({
|
|
78
|
+
usages
|
|
79
|
+
}, {
|
|
80
|
+
where: {
|
|
81
|
+
id
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.SequelizeUniqueCodesService = SequelizeUniqueCodesService;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
module.exports = {
|
|
3
|
+
createUniqueCodesTable: (queryInterface, Sequelize) => {
|
|
4
|
+
return queryInterface.createTable("unique_codes", {
|
|
5
|
+
id: {
|
|
6
|
+
type: Sequelize.INTEGER,
|
|
7
|
+
primaryKey: true,
|
|
8
|
+
autoIncrement: true,
|
|
9
|
+
allowNull: false
|
|
10
|
+
},
|
|
11
|
+
code: {
|
|
12
|
+
type: Sequelize.STRING,
|
|
13
|
+
allowNull: false
|
|
14
|
+
},
|
|
15
|
+
metadata: Sequelize.JSON,
|
|
16
|
+
valid_at: Sequelize.DATE,
|
|
17
|
+
expires_at: Sequelize.DATE,
|
|
18
|
+
available_usage_count: Sequelize.INTEGER,
|
|
19
|
+
usages: Sequelize.JSON,
|
|
20
|
+
type: {
|
|
21
|
+
type: Sequelize.STRING,
|
|
22
|
+
allowNull: false
|
|
23
|
+
},
|
|
24
|
+
created_at: Sequelize.DATE,
|
|
25
|
+
updated_at: Sequelize.DATE,
|
|
26
|
+
deleted_at: Sequelize.DATE
|
|
27
|
+
});
|
|
28
|
+
},
|
|
29
|
+
dropUniqueCodeTable: (queryInterface, Sequelize) => {
|
|
30
|
+
return queryInterface.dropTable("unique_codes");
|
|
31
|
+
}
|
|
32
|
+
};
|