feat: Adding basic GraphQL elements (company,user,sessions)
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
const { ROOT_PATH, HANDLERS_PATH } = process.env;
|
const { complete_register } = require( '../../../lib/Handlers/Account' );
|
||||||
const { complete_register } = require( `${ROOT_PATH}/${HANDLERS_PATH}/Account` );
|
|
||||||
|
|
||||||
const register = async( req, res ) => {
|
const register = async( req, res ) => {
|
||||||
try{
|
try{
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
const { DateResolver, DateTimeResolver } = require('graphql-scalars');
|
const { DateResolver, DateTimeResolver } = require('graphql-scalars');
|
||||||
const { Account, User, Company } = require('../../Domain');
|
const { Account, User, Company, getUserById, getCompanyById, findUsersPage, findCompaniesPage } = require('../../Domain');
|
||||||
|
|
||||||
//////////////////////////////////////////////
|
//////////////////////////////////////////////
|
||||||
// Queries
|
// Queries
|
||||||
@@ -20,12 +20,34 @@ async function company( args, context ) {
|
|||||||
return company;
|
return company;
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////
|
async function companyById( args, context ) {
|
||||||
|
return getCompanyById( args.id );
|
||||||
|
}
|
||||||
|
|
||||||
|
async function userById( args, context ) {
|
||||||
|
return getUserById( args.id );
|
||||||
|
}
|
||||||
|
|
||||||
|
async function findCompanies( args, context ) {
|
||||||
|
const { filters, elements, page } = args;
|
||||||
|
return findCompaniesPage( filters, elements, page );
|
||||||
|
}
|
||||||
|
|
||||||
|
async function findUsers( args, context ) {
|
||||||
|
const { filters, elements, page } = args;
|
||||||
|
return findUsersPage( filters, elements, page );
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////
|
||||||
// Mutations
|
// Mutations
|
||||||
//////////////////////////////////////////////
|
/////////////////////////////////////////////////
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
account,
|
account,
|
||||||
profile,
|
profile,
|
||||||
company
|
company,
|
||||||
|
companyById,
|
||||||
|
userById,
|
||||||
|
findCompanies,
|
||||||
|
findUsers
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,6 +2,12 @@ type Query {
|
|||||||
account : Account!
|
account : Account!
|
||||||
profile : User!
|
profile : User!
|
||||||
company : Company!
|
company : Company!
|
||||||
|
|
||||||
|
companyById( id : Int! ) : PublicCompany
|
||||||
|
userById( id : Int! ) : PublicUser
|
||||||
|
|
||||||
|
findCompanies( filters : FindCompanyFilterInput!, elements: Int!, page: Int! ) : PublicCompanyFound!
|
||||||
|
findUsers( filters : FindUserFilterInput!, elements: Int!, page: Int! ) : PublicUserFound!
|
||||||
}
|
}
|
||||||
|
|
||||||
scalar DateTime
|
scalar DateTime
|
||||||
@@ -15,7 +21,6 @@ type Account {
|
|||||||
user : User!
|
user : User!
|
||||||
|
|
||||||
sessions( limit: Int , offset : Int ) : [Session]!
|
sessions( limit: Int , offset : Int ) : [Session]!
|
||||||
sessionsCount : Int!
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type LocationCategory{
|
type LocationCategory{
|
||||||
@@ -35,7 +40,6 @@ type Location{
|
|||||||
address_line2 : String
|
address_line2 : String
|
||||||
|
|
||||||
categories : [LocationCategory]!
|
categories : [LocationCategory]!
|
||||||
categoriesCount : Int!
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type TruckType{
|
type TruckType{
|
||||||
@@ -51,6 +55,8 @@ type CompanyCategory{
|
|||||||
type Company {
|
type Company {
|
||||||
id : Int!
|
id : Int!
|
||||||
owner : User!
|
owner : User!
|
||||||
|
staff : [User]!
|
||||||
|
|
||||||
type : String!
|
type : String!
|
||||||
is_hidden : Boolean!
|
is_hidden : Boolean!
|
||||||
is_active : Boolean!
|
is_active : Boolean!
|
||||||
@@ -60,14 +66,9 @@ type Company {
|
|||||||
|
|
||||||
createdAt : DateTime!
|
createdAt : DateTime!
|
||||||
|
|
||||||
locations( limit: Int , offset : Int ) : [Location]!
|
locations : [Location]!
|
||||||
locationsCount : Int!
|
categories : [CompanyCategory]!
|
||||||
|
|
||||||
categories : [LocationCategory]!
|
|
||||||
categoriesCount : Int!
|
|
||||||
|
|
||||||
truck_types : [TruckType]!
|
truck_types : [TruckType]!
|
||||||
truck_typesCount : Int!
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type User {
|
type User {
|
||||||
@@ -84,5 +85,62 @@ type User {
|
|||||||
is_active : Boolean!
|
is_active : Boolean!
|
||||||
|
|
||||||
locations( limit: Int , offset : Int ) : [Location]!
|
locations( limit: Int , offset : Int ) : [Location]!
|
||||||
locationsCount : Int!
|
}
|
||||||
|
|
||||||
|
type PublicCompany {
|
||||||
|
id : Int!
|
||||||
|
owner : PublicUser!
|
||||||
|
staff : [PublicUser]!
|
||||||
|
|
||||||
|
type : String!
|
||||||
|
name : String!
|
||||||
|
description : String
|
||||||
|
|
||||||
|
createdAt : DateTime!
|
||||||
|
|
||||||
|
locations : [Location]!
|
||||||
|
categories : [CompanyCategory]!
|
||||||
|
truck_types : [TruckType]!
|
||||||
|
}
|
||||||
|
|
||||||
|
type PublicCompanyFound {
|
||||||
|
count : Int!
|
||||||
|
list : [PublicCompany]!
|
||||||
|
}
|
||||||
|
|
||||||
|
input FindCompanyFilterInput {
|
||||||
|
name : String
|
||||||
|
type : String
|
||||||
|
state : String
|
||||||
|
city : String
|
||||||
|
truck_type : String
|
||||||
|
categories : String
|
||||||
|
}
|
||||||
|
|
||||||
|
type PublicUser {
|
||||||
|
id : Int!
|
||||||
|
company : Company
|
||||||
|
phone : String
|
||||||
|
|
||||||
|
email : String!
|
||||||
|
name : String!
|
||||||
|
last_name : String!
|
||||||
|
job_role : String!
|
||||||
|
createdAt : DateTime!
|
||||||
|
|
||||||
|
locations( limit: Int , offset : Int ) : [Location]!
|
||||||
|
}
|
||||||
|
|
||||||
|
type PublicUserFound {
|
||||||
|
count : Int!
|
||||||
|
list : [PublicUser]!
|
||||||
|
}
|
||||||
|
|
||||||
|
input FindUserFilterInput {
|
||||||
|
email : String
|
||||||
|
name : String
|
||||||
|
last_name : String
|
||||||
|
employee_id : String
|
||||||
|
company_name : String
|
||||||
|
job_role : String
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,11 +2,100 @@
|
|||||||
|
|
||||||
const Repository = require('../Repository');
|
const Repository = require('../Repository');
|
||||||
|
|
||||||
|
class TruckType {
|
||||||
|
constructor( category ){
|
||||||
|
this._category = category;
|
||||||
|
}
|
||||||
|
|
||||||
|
async id(){
|
||||||
|
return this._category.id;
|
||||||
|
}
|
||||||
|
async category(){
|
||||||
|
return this._category.category;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Category {
|
||||||
|
constructor( category ){
|
||||||
|
this._category = category;
|
||||||
|
}
|
||||||
|
|
||||||
|
async id(){
|
||||||
|
return this._category.id;
|
||||||
|
}
|
||||||
|
async category(){
|
||||||
|
return this._category.category;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Location {
|
||||||
|
constructor( location ){
|
||||||
|
this._location = location;
|
||||||
|
this._categories = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
async populate_content(){
|
||||||
|
if( !this._categories ){
|
||||||
|
this._categories = await Repository.getCategories( 'location', this._location.id );
|
||||||
|
|
||||||
|
this._categories.map( (element) => {
|
||||||
|
return new Category( element );
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async company_id(){
|
||||||
|
await this.populate_content();
|
||||||
|
this._location.company_id;
|
||||||
|
}
|
||||||
|
async type(){
|
||||||
|
await this.populate_content();
|
||||||
|
this._location.type;
|
||||||
|
}
|
||||||
|
async state(){
|
||||||
|
await this.populate_content();
|
||||||
|
this._location.state;
|
||||||
|
}
|
||||||
|
async city(){
|
||||||
|
await this.populate_content();
|
||||||
|
this._location.city;
|
||||||
|
}
|
||||||
|
async country(){
|
||||||
|
await this.populate_content();
|
||||||
|
this._location.country;
|
||||||
|
}
|
||||||
|
async zipcode(){
|
||||||
|
await this.populate_content();
|
||||||
|
this._location.zipcode;
|
||||||
|
}
|
||||||
|
async address_line1(){
|
||||||
|
await this.populate_content();
|
||||||
|
this._location.address_line1;
|
||||||
|
}
|
||||||
|
async address_line2(){
|
||||||
|
await this.populate_content();
|
||||||
|
this._location.address_line2;
|
||||||
|
}
|
||||||
|
|
||||||
|
async categories(){
|
||||||
|
await this.populate_content();
|
||||||
|
return this._categories;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class Company {
|
class Company {
|
||||||
constructor( companyId , owner = null ){
|
constructor( companyId , owner = null ){
|
||||||
this._companyId = companyId;
|
this._companyId = companyId;
|
||||||
this._company = null;
|
this._company = null;
|
||||||
this._owner = owner;
|
this._owner = owner;
|
||||||
|
this._staff = null;
|
||||||
|
this._locations = null;
|
||||||
|
this._truck_types = null;
|
||||||
|
this._categories = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
setCompany( company ){
|
||||||
|
this._company = company;
|
||||||
}
|
}
|
||||||
|
|
||||||
async populate_content(){
|
async populate_content(){
|
||||||
@@ -17,6 +106,31 @@ class Company {
|
|||||||
this._owner = new User( this._company.owner_id, this );
|
this._owner = new User( this._company.owner_id, this );
|
||||||
await this._owner.populate_content();
|
await this._owner.populate_content();
|
||||||
}
|
}
|
||||||
|
if( !this._locations ){
|
||||||
|
this._locations = await Repository.getLocations( 'company', this._companyId );
|
||||||
|
|
||||||
|
this._locations.map( (element) => {
|
||||||
|
return new Location( element );
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if( !this._truck_types ){
|
||||||
|
this._truck_types = await Repository.getTruckTypes( 'company', this._companyId );
|
||||||
|
|
||||||
|
this._truck_types.map( (element) => {
|
||||||
|
return new TruckType( element );
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if( !this._categories ){
|
||||||
|
this._categories = await Repository.getCategories( 'company', this._companyId );
|
||||||
|
|
||||||
|
this._categories.map( (element) => {
|
||||||
|
return new Category( element );
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if( !this._staff ){
|
||||||
|
/// ToDo: Populate _staff
|
||||||
|
this._staff = []
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async id(){
|
async id(){
|
||||||
@@ -26,6 +140,10 @@ class Company {
|
|||||||
await this.populate_content();
|
await this.populate_content();
|
||||||
return this._owner;
|
return this._owner;
|
||||||
}
|
}
|
||||||
|
async staff(){
|
||||||
|
await this.populate_content();
|
||||||
|
return this._staff;
|
||||||
|
}
|
||||||
|
|
||||||
async type(){
|
async type(){
|
||||||
await this.populate_content();
|
await this.populate_content();
|
||||||
@@ -52,22 +170,33 @@ class Company {
|
|||||||
return this._company.createdAt;
|
return this._company.createdAt;
|
||||||
}
|
}
|
||||||
|
|
||||||
// locations( limit: Int , offset : Int ) : [Location]!
|
async locations(){
|
||||||
// locationsCount : Int!
|
await this.populate_content();
|
||||||
// categories : [LocationCategory]!
|
return this._locations;
|
||||||
// categoriesCount : Int!
|
}
|
||||||
// truck_types : [TruckType]!
|
async categories(){
|
||||||
// truck_typesCount : Int!
|
await this.populate_content();
|
||||||
|
return this._categories;
|
||||||
|
}
|
||||||
|
async truck_types(){
|
||||||
|
await this.populate_content();
|
||||||
|
return this._truck_types;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class User {
|
class User {
|
||||||
constructor( userId, company = null ){
|
constructor( userId, company = null ){
|
||||||
this._userId = userId;
|
this._userId = userId;
|
||||||
this._user = null;
|
this._user = null;
|
||||||
|
this._locations = null;
|
||||||
|
|
||||||
this._company = company;
|
this._company = company;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setUser( user ){
|
||||||
|
this._user = user;
|
||||||
|
}
|
||||||
|
|
||||||
async populate_content(){
|
async populate_content(){
|
||||||
if(! this._user ){
|
if(! this._user ){
|
||||||
this._user = await Repository.getUserById( this._userId );
|
this._user = await Repository.getUserById( this._userId );
|
||||||
@@ -78,6 +207,14 @@ class User {
|
|||||||
this._company = new Company( this._user.company_id, this );
|
this._company = new Company( this._user.company_id, this );
|
||||||
await this._company.populate_content();
|
await this._company.populate_content();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( !this._locations ){
|
||||||
|
this._locations = await Repository.getLocations( 'user', this._userId );
|
||||||
|
|
||||||
|
this._locations.map( (element) => {
|
||||||
|
return new Location( element );
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async id(){
|
async id(){
|
||||||
@@ -123,11 +260,8 @@ class User {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async locations(){
|
async locations(){
|
||||||
return [];
|
await this.populate_content();
|
||||||
}
|
return this._locations;
|
||||||
|
|
||||||
async locationsCount(){
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,6 +272,10 @@ class Account {
|
|||||||
this._user = null;
|
this._user = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setUser( user ){
|
||||||
|
this._user = user;
|
||||||
|
}
|
||||||
|
|
||||||
async user(){
|
async user(){
|
||||||
if( this._user ){
|
if( this._user ){
|
||||||
return this._user;
|
return this._user;
|
||||||
@@ -147,12 +285,14 @@ class Account {
|
|||||||
return this._user;
|
return this._user;
|
||||||
}
|
}
|
||||||
|
|
||||||
async _update_sessions(){
|
async populate_content(){
|
||||||
if( this._sessions ){
|
if( this._sessions ){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this._sessions = (await Repository.getSessions( this._userId )).map( (item) => {
|
this._sessions = await Repository.getSessions( this._userId );
|
||||||
|
|
||||||
|
this._sessions.map( (item) => {
|
||||||
return {
|
return {
|
||||||
token : item.token,
|
token : item.token,
|
||||||
expiration : item.expiration
|
expiration : item.expiration
|
||||||
@@ -161,19 +301,70 @@ class Account {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async sessions(){
|
async sessions(){
|
||||||
await this._update_sessions();
|
await this.populate_content();
|
||||||
return this._sessions;
|
return this._sessions;
|
||||||
}
|
}
|
||||||
|
|
||||||
async sessionsCount(){
|
|
||||||
await this._update_sessions();
|
|
||||||
return this._sessions.length;
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
async function getUserById( id ) {
|
||||||
|
const user = await Repository.getUserById( id );
|
||||||
|
if( user ){
|
||||||
|
const user_obj = new User( user.id );
|
||||||
|
user_obj.setUser(user);
|
||||||
|
return user_obj;
|
||||||
|
}else{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getCompanyById( id ) {
|
||||||
|
const company = await Repository.getCompanyById( id );
|
||||||
|
if( company ){
|
||||||
|
const company_obj = new Company( user.id );
|
||||||
|
company_obj.setCompany(company);
|
||||||
|
return company_obj;
|
||||||
|
}else{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function findUsersPage( filters, elements, page ) {
|
||||||
|
/// ToDo: Populate find
|
||||||
|
const list = [];
|
||||||
|
list.map( (element) => {
|
||||||
|
const user = new User( element.id );
|
||||||
|
user.setUser( element );
|
||||||
|
return user;
|
||||||
|
} );
|
||||||
|
return {
|
||||||
|
count : list.length,
|
||||||
|
list
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async function findCompaniesPage( filters, elements, page ) {
|
||||||
|
/// ToDo: Populate find
|
||||||
|
const list = [];
|
||||||
|
list.map( (element) => {
|
||||||
|
const company = new Company( element.id );
|
||||||
|
company.setCompany( element );
|
||||||
|
return company;
|
||||||
|
} );
|
||||||
|
return {
|
||||||
|
count : list.length,
|
||||||
|
list
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
Account,
|
Account,
|
||||||
User,
|
User,
|
||||||
Company
|
Company,
|
||||||
|
Location,
|
||||||
|
Category,
|
||||||
|
TruckType,
|
||||||
|
getUserById,
|
||||||
|
getCompanyById,
|
||||||
|
findUsersPage,
|
||||||
|
findCompaniesPage,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -5,6 +5,13 @@ const Users = getModel('users');
|
|||||||
const Sessions = getModel('users_sessions');
|
const Sessions = getModel('users_sessions');
|
||||||
const Companies = getModel('companies');
|
const Companies = getModel('companies');
|
||||||
|
|
||||||
|
const Locations = getModel('locations');
|
||||||
|
const userLocations = getModel('user_locations');
|
||||||
|
const companyTruckTypes = getModel('company_truck_types');
|
||||||
|
const companyCategories = getModel('company_categories');
|
||||||
|
const locationTruckTypes = getModel('location_truck_types');
|
||||||
|
const locationCategories = getModel('location_categories');
|
||||||
|
|
||||||
class SpecificModelRepository{
|
class SpecificModelRepository{
|
||||||
constructor(){}
|
constructor(){}
|
||||||
|
|
||||||
@@ -20,6 +27,42 @@ class SpecificModelRepository{
|
|||||||
return await Sessions.query().where("user_id","=",userId);
|
return await Sessions.query().where("user_id","=",userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async getLocations( location_type, elementId ){
|
||||||
|
switch( location_type ){
|
||||||
|
case 'company':
|
||||||
|
return await Locations.query().where("company_id","=",elementId);
|
||||||
|
case 'user':
|
||||||
|
///ToDo: Implement join on Locations and userLocations
|
||||||
|
return [];
|
||||||
|
default:
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async getCategories( category_type, elementId ){
|
||||||
|
switch( category_type ){
|
||||||
|
case 'company':
|
||||||
|
return await companyCategories.query().where("company_id","=",elementId);
|
||||||
|
case 'location':
|
||||||
|
///ToDo: Implement join on companyCategories and locationCategories
|
||||||
|
return [];
|
||||||
|
default:
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async getTruckTypes( search_type, elementId ){
|
||||||
|
switch( search_type ){
|
||||||
|
case 'company':
|
||||||
|
return await companyTruckTypes.query().where("company_id","=",elementId);
|
||||||
|
case 'location':
|
||||||
|
///ToDo: Implement join on companyTruckTypes and locationTruckTypes
|
||||||
|
return [];
|
||||||
|
default:
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = new SpecificModelRepository();
|
module.exports = new SpecificModelRepository();
|
||||||
@@ -3,6 +3,17 @@
|
|||||||
const users = require('./users.model');
|
const users = require('./users.model');
|
||||||
const user_sessions = require('./user_sessions.model');
|
const user_sessions = require('./user_sessions.model');
|
||||||
const companies = require('./companies.model');
|
const companies = require('./companies.model');
|
||||||
|
const locations = require('./locations.model');
|
||||||
|
const user_locations = require('./user_locations.model');
|
||||||
|
const company_truck_types = require('./company_truck_types.model');
|
||||||
|
const company_categories = require('./company_categories.model');
|
||||||
|
const location_categories = require('./location_categories.model');
|
||||||
|
const location_truck_types = require('./location_truck_types.model');
|
||||||
|
|
||||||
|
const metadata_categories = require('./metadata_categories.model');
|
||||||
|
const metadata_cities = require('./metadata_cities.model');
|
||||||
|
const metadata_products = require('./metadata_products.model');
|
||||||
|
const metadata_truck_types = require('./metadata_truck_types.model');
|
||||||
|
|
||||||
function getModel( name ){
|
function getModel( name ){
|
||||||
switch( name ){
|
switch( name ){
|
||||||
@@ -12,6 +23,28 @@ function getModel( name ){
|
|||||||
return user_sessions;
|
return user_sessions;
|
||||||
case 'companies':
|
case 'companies':
|
||||||
return companies;
|
return companies;
|
||||||
|
case 'locations':
|
||||||
|
return locations;
|
||||||
|
|
||||||
|
case 'user_locations':
|
||||||
|
return user_locations;
|
||||||
|
case 'company_truck_types':
|
||||||
|
return company_truck_types;
|
||||||
|
case 'company_categories':
|
||||||
|
return company_categories;
|
||||||
|
case 'location_categories':
|
||||||
|
return location_categories;
|
||||||
|
case 'location_truck_types':
|
||||||
|
return location_truck_types;
|
||||||
|
|
||||||
|
case 'metadata_categories':
|
||||||
|
return metadata_categories;
|
||||||
|
case 'metadata_cities':
|
||||||
|
return metadata_cities;
|
||||||
|
case 'metadata_products':
|
||||||
|
return metadata_products;
|
||||||
|
case 'metadata_truck_types':
|
||||||
|
return metadata_truck_types;
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,4 +22,4 @@ class Locations extends Model {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Users;
|
module.exports = Locations;
|
||||||
|
|||||||
Reference in New Issue
Block a user