diff --git a/server/src/app.ts b/server/src/app.ts index 366a65553d7703169d63f10d608cff484411bc2a..1c62ec174ee53bc64eb39cc3412a932f0b7f59c6 100644 --- a/server/src/app.ts +++ b/server/src/app.ts @@ -2,7 +2,6 @@ import express, { Application } from 'express'; import routes from "./routes/routes"; import bodyParser from 'body-parser'; import cors from 'cors'; -import mysql from 'mysql2'; // Boot express const app: Application = express(); diff --git a/server/src/controllers/categoryController/index.ts b/server/src/controllers/categoryController/index.ts index 6d9d91a1d812ac99c00af092a9ed2928a80d678f..04d2f97730303afe3925758ab137e6e0f6f6df4f 100644 --- a/server/src/controllers/categoryController/index.ts +++ b/server/src/controllers/categoryController/index.ts @@ -20,7 +20,7 @@ const category = new Category(); router.route('/').post(async (request: Request, response: Response) => { const {category} = request.body; try { - const input = (` INSERT INTO category(navn) VALUES (?);`) + const input = (` INSERT INTO category(name) VALUES (?);`) return response.status(200).json( await query(input,[category]) ); diff --git a/server/src/controllers/categoryController/tests/categoryController.test.ts b/server/src/controllers/categoryController/tests/categoryController.test.ts index a0283e72cfa8e64a2d2820393b0f34a249143e72..22c7fc8035211209871148db40179f80b62a802f 100644 --- a/server/src/controllers/categoryController/tests/categoryController.test.ts +++ b/server/src/controllers/categoryController/tests/categoryController.test.ts @@ -11,7 +11,9 @@ describe('Test categoryController', () => { }); it('Request /api/category should return request of 200!', async () => { - const result = await request(app).get('/api/category').send(); + const result = await request(app) + .get('/api/category') + .send() expect(result.status).toBe(200); }); @@ -20,6 +22,6 @@ describe('Test categoryController', () => { const result = await request(app).get('/api/category/1').send(); expect(result.status).toBe(200); - expect(result.body.data[0]?.navn).toBe('Antikviteter og Kunst'); + expect(result.body.data[0]?.name).toBe('Antikviteter og Kunst'); }); -}); \ No newline at end of file +}); diff --git a/server/src/controllers/postcontroller/index.ts b/server/src/controllers/postcontroller/index.ts index c437f2c608dd9d3087ecc1099a3544a4585f5a7b..a296498fdf50da35a230cc7d198b9cf76a0d2dd4 100644 --- a/server/src/controllers/postcontroller/index.ts +++ b/server/src/controllers/postcontroller/index.ts @@ -36,7 +36,7 @@ router.route('/').post(async (request: Request, response: Response) => { router.route('/').get(async (_: Request, response: Response) => { try { //response.status(200).json(await query("SELECT * FROM post;","")); - const input = `SELECT p.id, p.title, p.description, p.timestamp, p.owner, category.navn, p.imageUrl + const input = `SELECT p.id, p.title, p.description, p.timestamp, p.owner, category.name, p.imageUrl FROM post as p INNER JOIN category ON category.categoryid = p.categoryid;` response.status(200).json(await query(input,"")); @@ -50,7 +50,7 @@ router.route('/:id').get(async (request: Request, response: Response) => { const postId = request.params.id; try { //response.status(200).json(await query("SELECT * FROM post WHERE id=?;",[postId])); - const input = `SELECT p.id, p.title, p.description, p.timestamp, p.owner, category.navn, p.imageUrl + const input = `SELECT p.id, p.title, p.description, p.timestamp, p.owner, category.name, p.imageUrl FROM post as p INNER JOIN category ON category.categoryid = p.categoryid WHERE p.id=?;` response.status(200).json(await query(input,[postId])); diff --git a/server/src/controllers/postcontroller/tests/postController.test.ts b/server/src/controllers/postcontroller/tests/postController.test.ts new file mode 100644 index 0000000000000000000000000000000000000000..536b27c0d6db6ebb4f51b2f7ae6b6422befce6ea --- /dev/null +++ b/server/src/controllers/postcontroller/tests/postController.test.ts @@ -0,0 +1,28 @@ +import request from 'supertest'; +import app from '../../../app'; + +describe('Test postController', () => { + beforeAll(async () => { // kjører før testing + console.log("Post controller test starting..."); + }); + + afterAll(async () => { // kjører når all testing er gått gjennom + console.log("...Test ending"); + }); + + it('Request /api/post should return request of 200!', async () => { + const result = await request(app) + .get('/api/post') + .send() + + expect(result.status).toBe(200); + }); + + it('Request /api/post/1 should return data with name "test"!', async () => { + const result = await request(app).get('/api/post/1').send(); + + expect(result.status).toBe(200); + expect(result.body.data[0]?.title).toBe('test'); + }); + +}); \ No newline at end of file diff --git a/server/src/controllers/userController/index.ts b/server/src/controllers/userController/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..8bc393a47ed75a0864a3ffda17be3450aba44f67 --- /dev/null +++ b/server/src/controllers/userController/index.ts @@ -0,0 +1,74 @@ +import { Response, Request } from "express"; +import query from '../../services/db_query'; +import express from 'express'; +import IUser from '../../models/user'; + +const router = express.Router(); +/* ============================= CREATE ============================= */ +// Get all users `/api/user/` +router.route('/').post(async (request: Request, response: Response) => { + const {username, email, password, create_time} = request.body; + try { + const user: IUser = { + "username": username, + "email": email, + "password": password, + }; + if (Object.values(user).filter(p => p == undefined).length > 0) return response.status(500).send("Error"); + const input = (`INSERT INTO user(username, email, password) VALUES (?,?,?)`) + return response.status(200).json( + await query(input,Object.values(user)) + ); + } catch (error) { + return response.status(400).send("Bad Request"); + } +}); +/* ============================= READ ============================= */ +// Get all users `/api/user/` +router.route('/').get(async (_: Request, response: Response) => { + try { + const input = "SELECT * FROM user;" + response.status(200).json(await query(input,"")); + } catch (error) { + response.status(400).send("Bad Request"); + } +}); + +// Get post with id `/api/user/:id` +router.route('/:userId').get(async (request: Request, response: Response) => { + const userId = request.params.userId; + try { + const input = `SELECT * FROM user WHERE userId=?;` + response.status(200).json(await query(input,[userId])); + } catch (error) { + response.status(400).send("Bad Request"); + } +}); + +/* ============================= UPDATE ============================= */ +// Update user from id `/api/user/:id` +router.route('/:userId').put(async (request: Request, response: Response) => { + const userId = request.params.userId; + const {username, email, password} = request.body; + try { + const input = `UPDATE user SET username=?, email=?, password=? WHERE userId=?);`; + response.status(200).json(await query(input,[username, email, password, userId])); + } catch (error) { + response.status(400).send("Bad Request"); + } +}); + +/* ============================= DELETE ============================= */ +// Delete user from id `/api/user/:id` +router.route('/:userId').delete(async (request: Request, response: Response) => { + const userId = request.params.userId; + try { + const input = `DELETE FROM user WHERE (userId=?);`; + response.status(200).json(await query(input,[userId])); + } catch (error) { + response.status(400).send("Bad Request"); + } +}); + +export default router; + diff --git a/server/src/controllers/userController/tests/userController.test.ts b/server/src/controllers/userController/tests/userController.test.ts new file mode 100644 index 0000000000000000000000000000000000000000..000014a281dbff84224cd11690b15b7dd88ca865 --- /dev/null +++ b/server/src/controllers/userController/tests/userController.test.ts @@ -0,0 +1,27 @@ +import request from 'supertest'; +import app from '../../../app'; + +describe('Test userController', () => { + beforeAll(async () => { // kjører før testing + console.log("User controller test starting..."); + }); + + afterAll(async () => { // kjører når all testing er gått gjennom + console.log("...Test ending"); + }); + + it('Request /api/category should return request of 200!', async () => { + const result = await request(app) + .get('/api/user') + .send() + + expect(result.status).toBe(200); + }); + + it('Request /api/category/1 should return data with name "zorg"!', async () => { + const result = await request(app).get('/api/user/1').send(); + + expect(result.status).toBe(200); + expect(result.body.data[0]?.username).toBe('zorg'); + }); +}); \ No newline at end of file diff --git a/server/src/models/post.ts b/server/src/models/post.ts index 146bf71067332d191d975514b24837200d3d3706..1a5a4cc8f8d6a513ba2e37b2c85bacd4fca3a257 100644 --- a/server/src/models/post.ts +++ b/server/src/models/post.ts @@ -9,4 +9,4 @@ interface IPost { } // Eksporterer IPost til bruk i andre filer. -export default IPost; \ No newline at end of file +export default IPost; diff --git a/server/src/models/user.ts b/server/src/models/user.ts new file mode 100644 index 0000000000000000000000000000000000000000..1833069dcc78a1462b0d38214fcd633247a4acdc --- /dev/null +++ b/server/src/models/user.ts @@ -0,0 +1,21 @@ +// Interface for the User object, taken from the database +interface IUser{ + userId?: number; + username: string; + email: string; + password: string; + create_time?: Date; +} + +export default IUser; + + + + + + + + + + + diff --git a/server/src/routes/routes.ts b/server/src/routes/routes.ts index aec88f548f1ea10d2c42f362a6d057ba586f0fdd..fa6b3f5bf0ec6d8a743bc94cddf87a2ed2a0b1f1 100644 --- a/server/src/routes/routes.ts +++ b/server/src/routes/routes.ts @@ -1,5 +1,6 @@ -import postController from '../controllers/postcontroller'; +import postController from '../controllers/postController'; import categoryController from '../controllers/categoryController'; +import userController from '../controllers/userController'; import express from 'express'; const router = express.Router(); @@ -7,6 +8,6 @@ const router = express.Router(); // Endpoints router.use("/post", postController); router.use("/category", categoryController); +router.use("/user", userController); - -export default router; +export default router; \ No newline at end of file diff --git a/server/src/services/db.ts b/server/src/services/db.ts index 9aef9c64fe2da88562219d58228ace85c6d9c903..22a62cfd99f84676a59e6ec3d0d5d0c5912083a6 100644 --- a/server/src/services/db.ts +++ b/server/src/services/db.ts @@ -9,5 +9,5 @@ async function query(sql:any, params:any) { } export default { - query + query, }