mirror of
https://github.com/ets-cfuhrman-pfe/EvalueTonSavoir.git
synced 2025-08-11 21:23:54 -04:00
setup routing
This commit is contained in:
parent
c26708a609
commit
80115f050c
4 changed files with 57 additions and 14 deletions
|
|
@ -1,9 +1,13 @@
|
||||||
|
const {Room} = require('../models/room.js');
|
||||||
|
|
||||||
const BaseRoomProvider = require('../roomsProviders/base-provider.js');
|
const BaseRoomProvider = require('../roomsProviders/base-provider.js');
|
||||||
//const ClusterRoomProvider = require('../roomsProviders/cluster-provider.js');
|
//const ClusterRoomProvider = require('../roomsProviders/cluster-provider.js');
|
||||||
const DockerRoomProvider = require('../roomsProviders/docker-provider.js');
|
const DockerRoomProvider = require('../roomsProviders/docker-provider.js');
|
||||||
//const KubernetesRoomProvider = require('../roomsProviders/kubernetes-provider');
|
//const KubernetesRoomProvider = require('../roomsProviders/kubernetes-provider');
|
||||||
|
|
||||||
|
const NB_CODE_CHARS = 6;
|
||||||
|
const DEFAULT_HOST = "localhost:4500"
|
||||||
|
|
||||||
class RoomsController {
|
class RoomsController {
|
||||||
constructor(options = {}, roomRepository) {
|
constructor(options = {}, roomRepository) {
|
||||||
this.provider = this.createProvider(
|
this.provider = this.createProvider(
|
||||||
|
|
@ -40,8 +44,19 @@ class RoomsController {
|
||||||
}
|
}
|
||||||
|
|
||||||
async createRoom(options = {}) {
|
async createRoom(options = {}) {
|
||||||
const roomId = options.roomId || this.generateRoomId();
|
let roomIdValid = false
|
||||||
return await this.provider.createRoom(roomId, options);
|
let roomId;
|
||||||
|
|
||||||
|
while(!roomIdValid){
|
||||||
|
roomId = options.roomId || this.generateRoomId();
|
||||||
|
roomIdValid = !(await this.provider.getRoomInfo(roomId));
|
||||||
|
}
|
||||||
|
|
||||||
|
return await this.roomRepository.create(new Room(roomId, roomId, DEFAULT_HOST, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
async updateRoom(roomId, info) {
|
||||||
|
return await this.provider.updateRoomInfo(roomId, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
async deleteRoom(roomId) {
|
async deleteRoom(roomId) {
|
||||||
|
|
@ -57,7 +72,14 @@ class RoomsController {
|
||||||
}
|
}
|
||||||
|
|
||||||
generateRoomId() {
|
generateRoomId() {
|
||||||
return Math.random().toString(36).substring(2, 7);
|
const characters = "0123456789";
|
||||||
|
let result = "";
|
||||||
|
for (let i = 0; i < NB_CODE_CHARS; i++) {
|
||||||
|
result += characters.charAt(
|
||||||
|
Math.floor(Math.random() * characters.length)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,8 +29,8 @@ class RoomRepository{
|
||||||
if (existingRoom) {
|
if (existingRoom) {
|
||||||
throw new Error(`Room already exists with id: ${room.id}`);
|
throw new Error(`Room already exists with id: ${room.id}`);
|
||||||
}
|
}
|
||||||
const result = await this.collection.insertOne(room);
|
const returnedId = await this.collection.insertOne(room);
|
||||||
return result.insertedId;
|
return await this.collection.findOne({ _id: returnedId.insertedId });
|
||||||
}
|
}
|
||||||
|
|
||||||
async get(id) {
|
async get(id) {
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ class DockerRoomProvider extends BaseRoomProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
async deleteRoom(roomId) {
|
async deleteRoom(roomId) {
|
||||||
|
return await this.roomRepository.delete(roomId); // shortcircuit -- not implemented yet
|
||||||
try {
|
try {
|
||||||
const container = this.docker.getContainer(roomId);
|
const container = this.docker.getContainer(roomId);
|
||||||
await container.stop();
|
await container.stop();
|
||||||
|
|
@ -34,9 +35,11 @@ class DockerRoomProvider extends BaseRoomProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
async getRoomStatus(roomId) {
|
async getRoomStatus(roomId) {
|
||||||
const room = await roomRepository.get(roomId);
|
const room = await this.roomRepository.get(roomId);
|
||||||
if (!room) return null;
|
if (!room) return null;
|
||||||
|
|
||||||
|
return room; // shortcircuit -- not implemented yet
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const container = this.docker.getContainer(room.containerId);
|
const container = this.docker.getContainer(room.containerId);
|
||||||
const info = await container.inspect();
|
const info = await container.inspect();
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ const jwt = require('../middleware/jwtToken.js');
|
||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
|
|
||||||
router.get("/listRooms", async (req, res)=> {
|
router.get("/", async (req, res)=> {
|
||||||
try {
|
try {
|
||||||
const data = await roomsController.listRooms();
|
const data = await roomsController.listRooms();
|
||||||
res.json(data);
|
res.json(data);
|
||||||
|
|
@ -14,30 +14,48 @@ router.get("/listRooms", async (req, res)=> {
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
router.get("/createRoom", async (req, res) => {
|
router.post("/", async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const data = await roomsController.createRoom();
|
const data = await roomsController.createRoom();
|
||||||
res.json(data);
|
res.json(data);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
res.status(500).json({ error: "Failed to list rooms" });
|
res.status(500).json({ error: "Failed to create room" });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get("/deleteRoom", async (req, res) => {
|
router.put("/:id", async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const data = await roomsController.deleteRoom();
|
const data = await roomsController.updateRoom(req.params.id);
|
||||||
res.json(data);
|
res.json(data);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
res.status(500).json({ error: "Failed to list rooms" });
|
res.status(500).json({ error: "Failed to update rooms" });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get("/getRoomStatus", async (req, res) => {
|
router.delete("/:id", async (req, res) => {
|
||||||
|
try {
|
||||||
|
const data = await roomsController.deleteRoom(req.params.id);
|
||||||
|
res.json(data);
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ error: `Failed to delete room` });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
router.get("/:id", async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const data = await roomsController.getRoomStatus();
|
const data = await roomsController.getRoomStatus();
|
||||||
res.json(data);
|
res.json(data);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
res.status(500).json({ error: "Failed to list rooms" });
|
res.status(500).json({ error: "Failed to join rooms" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
router.get("/:id/status", async (req, res) => {
|
||||||
|
try {
|
||||||
|
const data = await roomsController.getRoomStatus(req.params.id);
|
||||||
|
res.json(data);
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ error: "Failed to list room infos" });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue