Skip to content
Snippets Groups Projects
Commit b46209f9 authored by Jonny Ngo Luong's avatar Jonny Ngo Luong
Browse files

feat: added user login form, request and endpoint (#8)

parent 93892139
No related branches found
No related tags found
No related merge requests found
<p>user-login-form works!</p> <div class="loginForm">
<h3>Login</h3>
<app-text-input [(inputModel)]="username" label="Brukernavn" (blur)="checkForm()"></app-text-input>
<app-text-input [(inputModel)]="password" label="Passord" (blur)="checkForm()"></app-text-input>
<p>{{statusMessage}}</p>
<app-button (click)="loginUser()" text="Login"></app-button>
</div>
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { User } from 'src/app/models/user.model';
import { UserService } from '../user.service';
@Component({ @Component({
selector: 'app-user-login-form', selector: 'app-user-login-form',
...@@ -6,10 +9,57 @@ import { Component, OnInit } from '@angular/core'; ...@@ -6,10 +9,57 @@ import { Component, OnInit } from '@angular/core';
styleUrls: ['./user-login-form.component.scss'] styleUrls: ['./user-login-form.component.scss']
}) })
export class UserLoginFormComponent implements OnInit { export class UserLoginFormComponent implements OnInit {
username: string = "";
password: string = "";
constructor() { } statusMessage: string = "";
constructor(private userService: UserService, private router: Router) { }
ngOnInit(): void { ngOnInit(): void {
} }
/**
* Validates form.
*/
checkForm(): boolean {
if (this.username == "") {
this.setStatusMessage("Brukernavn kan ikke være tom");
return false;
}
else if (this.password == "") {
this.setStatusMessage("Passordet kan ikke være tom");
return false;
}
this.setStatusMessage("");
return true;
}
/**
* Login the user if it is valid.
*/
loginUser() {
if (this.checkForm()) {
const request = {
username: this.username,
password: this.password,
};
// Adds user to database and changes page afterwards
this.userService.login(request).then(status => {
console.log("User login: " + JSON.stringify(status));
this.router.navigateByUrl("/");
}).catch(error => {
console.log("Error adding user: " + error);
});
}
}
/**
* Sets a status message.
*/
setStatusMessage(message: string) {
this.statusMessage = message;
}
} }
...@@ -54,7 +54,7 @@ export class UserRegistrationFormComponent implements OnInit { ...@@ -54,7 +54,7 @@ export class UserRegistrationFormComponent implements OnInit {
// Adds user to database and changes page afterwards // Adds user to database and changes page afterwards
this.userService.addUser(newUser).then(status => { this.userService.addUser(newUser).then(status => {
console.log("User was added: " + status); console.log("User was added: " + JSON.stringify(status));
this.router.navigateByUrl("/"); this.router.navigateByUrl("/");
}).catch(error => { }).catch(error => {
console.log("Error adding user: " + error); console.log("Error adding user: " + error);
......
...@@ -2,15 +2,44 @@ import { HttpClient } from '@angular/common/http'; ...@@ -2,15 +2,44 @@ import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { User } from '../models/user.model'; import { User } from '../models/user.model';
interface IUserLogin {
username: string;
password: string;
}
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
}) })
export class UserService { export class UserService {
userUrl = "api/user/" userUrl = "api/user/"
loginUrl = "api/user/login"
constructor(private http: HttpClient) { } constructor(private http: HttpClient) { }
/**
* Get request of user from database on login request.
*/
login(body: IUserLogin): Promise<string> {
return new Promise<string>(
(resolve, reject) => {
this.login_user(body).subscribe((data: any) => {
try {
resolve(data.data);
} catch (err: any) {
reject(err);
}
},
(err: any) => {
console.log(err.message);
reject(err);
});
}
);
}
private login_user(body: IUserLogin) {
return this.http.post(this.loginUrl, body);
}
/** /**
* Adds user to database. * Adds user to database.
*/ */
...@@ -19,7 +48,7 @@ export class UserService { ...@@ -19,7 +48,7 @@ export class UserService {
(resolve, reject) => { (resolve, reject) => {
this.add_user(user).subscribe((data: any) => { this.add_user(user).subscribe((data: any) => {
try { try {
resolve(data.status); resolve(data.data);
} catch (err: any) { } catch (err: any) {
reject(err); reject(err);
} }
......
...@@ -27,24 +27,35 @@ router.route('/').post(async (request: Request, response: Response) => { ...@@ -27,24 +27,35 @@ router.route('/').post(async (request: Request, response: Response) => {
// Get all users `/api/user/` // Get all users `/api/user/`
router.route('/').get(async (_: Request, response: Response) => { router.route('/').get(async (_: Request, response: Response) => {
try { try {
const input = "SELECT * FROM user;" const input = "SELECT userId, username, email, create_time FROM user;"
response.status(200).json(await query(input,"")); response.status(200).json(await query(input,""));
} catch (error) { } catch (error) {
response.status(400).send("Bad Request"); response.status(400).send("Bad Request");
} }
}); });
// Get post with id `/api/user/:id` // Get user with id `/api/user/:id`
router.route('/:userId').get(async (request: Request, response: Response) => { router.route('/:userId').get(async (request: Request, response: Response) => {
const userId = request.params.userId; const userId = request.params.userId;
try { try {
const input = `SELECT * FROM user WHERE userId=?;` const input = `SELECT userId, username, email, create_time FROM user WHERE userId=?;`
response.status(200).json(await query(input,[userId])); response.status(200).json(await query(input,[userId]));
} catch (error) { } catch (error) {
response.status(400).send("Bad Request"); response.status(400).send("Bad Request");
} }
}); });
// Get user with username and password `/api/user/`
router.route('/login').post(async (request: Request, response: Response) => {
const {username, password} = request.body;
try {
const input = "SELECT userId, username, email, create_time FROM user WHERE username=? AND password=?;"
response.status(200).json(await query(input,[username, password]));
} catch (error) {
response.status(400).send("Bad Request");
}
});
/* ============================= UPDATE ============================= */ /* ============================= UPDATE ============================= */
// Update user from id `/api/user/:id` // Update user from id `/api/user/:id`
router.route('/:userId').put(async (request: Request, response: Response) => { router.route('/:userId').put(async (request: Request, response: Response) => {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment