Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4,361 changes: 4,357 additions & 4 deletions package-lock.json

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,13 @@
},
"dependencies": {
"express": "^4.17.1",
"mongoose": "^6.0.7",
"socket.io": "^4.1.2"
},
"devDependencies": {
"@babel/preset-typescript": "^7.14.5",
"@types/express": "^4.17.12",
"@types/mongoose": "^5.11.97",
"@types/node": "^15.12.2",
"@types/socket.io-client": "^3.0.0",
"@typescript-eslint/eslint-plugin": "^4.26.1",
Expand Down
4 changes: 3 additions & 1 deletion src/client/src/app/app.component.html
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
{{title}}
{{title}}
<app-user-list
></app-user-list>
6 changes: 5 additions & 1 deletion src/client/src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,14 @@ import { BrowserModule } from '@angular/platform-browser';
import { HttpClientModule } from '@angular/common/http';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { AddUserComponent } from './components/add-user/add-user.component';
import { UserListComponent } from './components/user-list/user-list.component';

@NgModule({
declarations: [
AppComponent
AppComponent,
AddUserComponent,
UserListComponent
],
imports: [
BrowserModule,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<p>add-user works!</p>
Empty file.
15 changes: 15 additions & 0 deletions src/client/src/app/components/add-user/add-user.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { Component, OnInit } from '@angular/core';

@Component({
selector: 'app-add-user',
templateUrl: './add-user.component.html',
styleUrls: ['./add-user.component.scss']
})
export class AddUserComponent implements OnInit {

constructor() { }

ngOnInit(): void {
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<p>user-list works!</p>
<ul>
<li *ngFor="let user of users$ | async">
{{users$ | json}}
</li>
</ul>
Empty file.
21 changes: 21 additions & 0 deletions src/client/src/app/components/user-list/user-list.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { Component, OnInit } from '@angular/core';
import { UserService } from 'src/app/services/user.service';

@Component({
selector: 'app-user-list',
templateUrl: './user-list.component.html',
styleUrls: ['./user-list.component.scss']
})
export class UserListComponent implements OnInit {

constructor(private userService: UserService) { }

ngOnInit(): void {
this.userService.getUsers();

}

get users$() {
return this.userService.users$
}
}
9 changes: 9 additions & 0 deletions src/client/src/app/models/user.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
export class User {
constructor(
public id: number,
public name: string,
public email: string
) {

}
}
5 changes: 4 additions & 1 deletion src/client/src/app/services/api.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,13 @@ import { Injectable } from '@angular/core';
})
export class ApiService {
baseUrl:string = 'http://localhost:3501/';
constructor(private http: HttpClient)
constructor(private http: HttpClient)
{ }

get<T>(resourceName: string) {
return this.http.get<T>(this.baseUrl + resourceName);
}
post<T, D>(resourceName: string, data: D) {
this.post<T, D>(this.baseUrl + resourceName, data)
}
}
21 changes: 21 additions & 0 deletions src/client/src/app/services/user.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { User } from '../models/user';
import { ApiService } from './api.service';

@Injectable({
providedIn: 'root'
})
export class UserService {

users$: Observable<User[]> = new Observable((Observer) => {
Observer.next([]);
});
constructor(private apiService: ApiService) {
this.getUsers()
}
getUsers() {
this.users$ = this.apiService.get<User[]>('users')
}

}
18 changes: 18 additions & 0 deletions src/server/schemas/user.schema.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@

import mongoose from 'mongoose';
const {Schema, model} = mongoose;
interface User {
name: string;
email: string;
avatar?: string;
}

// 2. Create a Schema corresponding to the document interface.
const userSchema = new Schema<User>({
name: { type: String, required: true },
email: { type: String, required: true },
avatar: String
});

// 3. Create a Model.
export const UserModel = model<User>('User', userSchema);
39 changes: 37 additions & 2 deletions src/server/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,14 @@ import express from 'express';
import cors from 'cors';
import fs from 'fs';
import path from 'path';

import mongoose from 'mongoose';
import { UserModel } from './schemas/user.schema.js';


mongoose.connect('mongodb://localhost:27017/test').then(() => {
console.log('connected to db');
}).catch(err => console.log(err, 'connecting to db'))

const app = express();
const __dirname = path.resolve();
const PORT = 3501;
Expand All @@ -15,10 +22,38 @@ app.get('/', function(req, res) {
});

app.get('/users', function(req,res){
res.sendFile(path.join(__dirname, 'users.json'));
UserModel.find().then(users => {
console.log('found users', users);
res.json({data: users})
})
});

app.get('/create-user', function(req, res) {
const user = new UserModel({

name: 'Doe',
email: 'Goe@bitwise.com'
});

user.save().then(user => {
console.log(user, 'saved');
res.json({data: user})
})
})
app.post('/users', function(req, res) {
const users = getResource('users');
users.push(req.body);
saveFile('users', users);
res.json(users);
})
function getResource(resourceName: string) {
const dataString = fs.readFileSync(path.join(__dirname, resourceName + 'mongodb://localhost:27017/test'), 'utf8');
return JSON.parse(dataString);
}

function saveFile(resourceName: string, data: any) {
fs.writeFileSync(path.join(__dirname, resourceName + 'mongodb://localhost:27017/test'), JSON.stringify(data))
}
app.listen(PORT, function(){
console.log( `starting at localhost http://localhost: ${PORT}`);
})