Files
ETAApi/v2/server/src/Apps/PrivateResources/Domain/index.js
2024-08-06 03:59:11 -06:00

180 lines
4.1 KiB
JavaScript

'use strict';
const Repository = require('../Repository');
class Company {
constructor( companyId , owner = null ){
this._companyId = companyId;
this._company = null;
this._owner = owner;
}
async populate_content(){
if(! this._company ){
this._company = await Repository.getCompanyById( this._companyId );
}
if(! this._owner ){
this._owner = new User( this._company.owner_id, this );
await this._owner.populate_content();
}
}
async id(){
return this._companyId;
}
async owner(){
await this.populate_content();
return this._owner;
}
async type(){
await this.populate_content();
return this._company.type;
}
async is_hidden(){
await this.populate_content();
return this._company.is_hidden;
}
async is_active(){
await this.populate_content();
return this._company.is_active;
}
async name(){
await this.populate_content();
return this._company.name;
}
async description(){
await this.populate_content();
return this._company.description;
}
async createdAt(){
await this.populate_content();
return this._company.createdAt;
}
// locations( limit: Int , offset : Int ) : [Location]!
// locationsCount : Int!
// categories : [LocationCategory]!
// categoriesCount : Int!
// truck_types : [TruckType]!
// truck_typesCount : Int!
}
class User {
constructor( userId, company = null ){
this._userId = userId;
this._user = null;
this._company = company;
}
async populate_content(){
if(! this._user ){
this._user = await Repository.getUserById( this._userId );
}
if( (!this._company) && (this._user.company_id) ){
/// Populate only if company is linked to user
this._company = new Company( this._user.company_id, this );
await this._company.populate_content();
}
}
async id(){
return this._userId;
}
async company(){
await this.populate_content();
return this._company;
}
async phone(){
await this.populate_content();
return this._user.phone;
}
async email(){
await this.populate_content();
return this._user.email;
}
async name(){
await this.populate_content();
return this._user.name;
}
async last_name(){
await this.populate_content();
return this._user.last_name;
}
async job_role(){
await this.populate_content();
return this._user.job_role;
}
async permissions(){
await this.populate_content();
return this._user.permissions;
}
async createdAt(){
await this.populate_content();
return this._user.createdAt;
}
async is_active(){
await this.populate_content();
return this._user.is_active;
}
async locations(){
return [];
}
async locationsCount(){
return 0;
}
}
class Account {
constructor( userId ){
this._userId = userId;
this._sessions = null;
this._user = null;
}
async user(){
if( this._user ){
return this._user;
}
this._user = new User( this._userId );
return this._user;
}
async _update_sessions(){
if( this._sessions ){
return;
}
this._sessions = (await Repository.getSessions( this._userId )).map( (item) => {
return {
token : item.token,
expiration : item.expiration
};
} );
}
async sessions(){
await this._update_sessions();
return this._sessions;
}
async sessionsCount(){
await this._update_sessions();
return this._sessions.length;
}
};
module.exports = {
Account,
User,
Company
};