Add Falukant region and transport management features
- Implemented new endpoints in AdminController for managing Falukant regions, including fetching, updating, and deleting region distances. - Enhanced the FalukantService with methods for retrieving region distances and handling upsert operations. - Updated the router to expose new routes for region management and transport creation. - Introduced a transport management interface in the frontend, allowing users to create and manage transports between branches. - Added localization for new transport-related terms and improved the vehicle management interface to include transport options. - Enhanced the database initialization logic to support new region and transport models.
This commit is contained in:
@@ -19,7 +19,9 @@ import Branch from "../models/falukant/data/branch.js";
|
||||
import FalukantStock from "../models/falukant/data/stock.js";
|
||||
import FalukantStockType from "../models/falukant/type/stock.js";
|
||||
import RegionData from "../models/falukant/data/region.js";
|
||||
import RegionType from "../models/falukant/type/region.js";
|
||||
import BranchType from "../models/falukant/type/branch.js";
|
||||
import RegionDistance from "../models/falukant/data/region_distance.js";
|
||||
import Room from '../models/chat/room.js';
|
||||
import UserParam from '../models/community/user_param.js';
|
||||
|
||||
@@ -298,6 +300,104 @@ class AdminService {
|
||||
}
|
||||
}
|
||||
|
||||
async getFalukantRegions(userId) {
|
||||
if (!(await this.hasUserAccess(userId, 'falukantusers'))) {
|
||||
throw new Error('noaccess');
|
||||
}
|
||||
|
||||
const regions = await RegionData.findAll({
|
||||
attributes: ['id', 'name', 'map'],
|
||||
include: [
|
||||
{
|
||||
model: RegionType,
|
||||
as: 'regionType',
|
||||
where: { labelTr: 'city' },
|
||||
attributes: ['labelTr'],
|
||||
},
|
||||
],
|
||||
order: [['name', 'ASC']],
|
||||
});
|
||||
|
||||
return regions;
|
||||
}
|
||||
|
||||
async updateFalukantRegionMap(userId, regionId, map) {
|
||||
if (!(await this.hasUserAccess(userId, 'falukantusers'))) {
|
||||
throw new Error('noaccess');
|
||||
}
|
||||
|
||||
const region = await RegionData.findByPk(regionId);
|
||||
if (!region) {
|
||||
throw new Error('regionNotFound');
|
||||
}
|
||||
|
||||
region.map = map || {};
|
||||
await region.save();
|
||||
|
||||
return region;
|
||||
}
|
||||
|
||||
async getRegionDistances(userId) {
|
||||
if (!(await this.hasUserAccess(userId, 'falukantusers'))) {
|
||||
throw new Error('noaccess');
|
||||
}
|
||||
|
||||
const distances = await RegionDistance.findAll();
|
||||
return distances;
|
||||
}
|
||||
|
||||
async upsertRegionDistance(userId, { sourceRegionId, targetRegionId, transportMode, distance }) {
|
||||
if (!(await this.hasUserAccess(userId, 'falukantusers'))) {
|
||||
throw new Error('noaccess');
|
||||
}
|
||||
|
||||
if (!sourceRegionId || !targetRegionId || !transportMode) {
|
||||
throw new Error('missingParameters');
|
||||
}
|
||||
|
||||
const src = await RegionData.findByPk(sourceRegionId);
|
||||
const tgt = await RegionData.findByPk(targetRegionId);
|
||||
if (!src || !tgt) {
|
||||
throw new Error('regionNotFound');
|
||||
}
|
||||
|
||||
const mode = String(transportMode);
|
||||
const dist = Number(distance);
|
||||
if (!Number.isFinite(dist) || dist <= 0) {
|
||||
throw new Error('invalidDistance');
|
||||
}
|
||||
|
||||
const [record] = await RegionDistance.findOrCreate({
|
||||
where: {
|
||||
sourceRegionId: src.id,
|
||||
targetRegionId: tgt.id,
|
||||
transportMode: mode,
|
||||
},
|
||||
defaults: {
|
||||
distance: dist,
|
||||
},
|
||||
});
|
||||
|
||||
if (record.distance !== dist) {
|
||||
record.distance = dist;
|
||||
await record.save();
|
||||
}
|
||||
|
||||
return record;
|
||||
}
|
||||
|
||||
async deleteRegionDistance(userId, id) {
|
||||
if (!(await this.hasUserAccess(userId, 'falukantusers'))) {
|
||||
throw new Error('noaccess');
|
||||
}
|
||||
const record = await RegionDistance.findByPk(id);
|
||||
if (!record) {
|
||||
throw new Error('notfound');
|
||||
}
|
||||
await record.destroy();
|
||||
return { success: true };
|
||||
}
|
||||
|
||||
async updateFalukantStock(userId, stockId, quantity) {
|
||||
if (!(await this.hasUserAccess(userId, 'falukantusers'))) {
|
||||
throw new Error('noaccess');
|
||||
|
||||
Reference in New Issue
Block a user