Browse Source

WIP - Add Season

old-project-state
Dan 2 years ago
parent
commit
e34b6ff815
  1. 195
      package-lock.json
  2. 1
      package.json
  3. 19
      server.js
  4. 6
      src/app/app.module.ts
  5. 7
      src/app/components/admin/admin.component.html
  6. 0
      src/app/components/admin/admin.component.less
  7. 21
      src/app/components/admin/admin.component.spec.ts
  8. 21
      src/app/components/admin/admin.component.ts
  9. 7
      src/app/components/new-season-card/new-season-card.component.html
  10. 9
      src/app/components/new-season-card/new-season-card.component.less
  11. 21
      src/app/components/new-season-card/new-season-card.component.spec.ts
  12. 10
      src/app/components/new-season-card/new-season-card.component.ts
  13. 9
      src/app/components/seasons/seasons.component.html
  14. 13
      src/app/components/seasons/seasons.component.less
  15. 9
      src/app/components/seasons/seasons.component.ts
  16. 7
      src/app/models/season.ts

195
package-lock.json

@ -22,6 +22,7 @@
"express": "^4.18.2",
"express-jwt": "^8.4.1",
"moment": "^2.29.4",
"mongoose": "^8.0.0",
"multer": "^1.4.5-lts.1",
"node-jsonwebtoken": "^0.0.1",
"nodemon": "^3.0.1",
@ -3752,6 +3753,14 @@
"tslib": "^2.1.0"
}
},
"node_modules/@mongodb-js/saslprep": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.1.tgz",
"integrity": "sha512-t7c5K033joZZMspnHg/gWPE4kandgc2OxE74aYOtGKfgB9VPuVJPix0H6fhmm2erj5PBJ21mqcx34lpIGtUCsQ==",
"dependencies": {
"sparse-bitfield": "^3.0.3"
}
},
"node_modules/@ngtools/webpack": {
"version": "16.2.9",
"resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.9.tgz",
@ -4404,6 +4413,20 @@
"@types/node": "*"
}
},
"node_modules/@types/webidl-conversions": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz",
"integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA=="
},
"node_modules/@types/whatwg-url": {
"version": "8.2.2",
"resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz",
"integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==",
"dependencies": {
"@types/node": "*",
"@types/webidl-conversions": "*"
}
},
"node_modules/@types/ws": {
"version": "8.5.9",
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.9.tgz",
@ -5277,6 +5300,14 @@
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
"node_modules/bson": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/bson/-/bson-6.2.0.tgz",
"integrity": "sha512-ID1cI+7bazPDyL9wYy9GaQ8gEEohWvcUl/Yf0dIdutJxnmInEEyCsb4awy/OiBfall7zBA179Pahi3vCdFze3Q==",
"engines": {
"node": ">=16.20.1"
}
},
"node_modules/buffer": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
@ -6244,7 +6275,6 @@
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dev": true,
"dependencies": {
"ms": "2.1.2"
},
@ -8167,7 +8197,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
"integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==",
"dev": true
"devOptional": true
},
"node_modules/ipaddr.js": {
"version": "2.1.0",
@ -8726,6 +8756,14 @@
"safe-buffer": "^5.0.1"
}
},
"node_modules/kareem": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz",
"integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==",
"engines": {
"node": ">=12.0.0"
}
},
"node_modules/karma": {
"version": "6.4.2",
"resolved": "https://registry.npmjs.org/karma/-/karma-6.4.2.tgz",
@ -9482,6 +9520,11 @@
"node": ">= 4.0.0"
}
},
"node_modules/memory-pager": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
"integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg=="
},
"node_modules/merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
@ -9849,6 +9892,136 @@
"node": "*"
}
},
"node_modules/mongodb": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.2.0.tgz",
"integrity": "sha512-d7OSuGjGWDZ5usZPqfvb36laQ9CPhnWkAGHT61x5P95p/8nMVeH8asloMwW6GcYFeB0Vj4CB/1wOTDG2RA9BFA==",
"dependencies": {
"@mongodb-js/saslprep": "^1.1.0",
"bson": "^6.2.0",
"mongodb-connection-string-url": "^2.6.0"
},
"engines": {
"node": ">=16.20.1"
},
"peerDependencies": {
"@aws-sdk/credential-providers": "^3.188.0",
"@mongodb-js/zstd": "^1.1.0",
"gcp-metadata": "^5.2.0",
"kerberos": "^2.0.1",
"mongodb-client-encryption": ">=6.0.0 <7",
"snappy": "^7.2.2",
"socks": "^2.7.1"
},
"peerDependenciesMeta": {
"@aws-sdk/credential-providers": {
"optional": true
},
"@mongodb-js/zstd": {
"optional": true
},
"gcp-metadata": {
"optional": true
},
"kerberos": {
"optional": true
},
"mongodb-client-encryption": {
"optional": true
},
"snappy": {
"optional": true
},
"socks": {
"optional": true
}
}
},
"node_modules/mongodb-connection-string-url": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz",
"integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==",
"dependencies": {
"@types/whatwg-url": "^8.2.1",
"whatwg-url": "^11.0.0"
}
},
"node_modules/mongodb-connection-string-url/node_modules/tr46": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
"integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
"dependencies": {
"punycode": "^2.1.1"
},
"engines": {
"node": ">=12"
}
},
"node_modules/mongodb-connection-string-url/node_modules/webidl-conversions": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
"engines": {
"node": ">=12"
}
},
"node_modules/mongodb-connection-string-url/node_modules/whatwg-url": {
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
"integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
"dependencies": {
"tr46": "^3.0.0",
"webidl-conversions": "^7.0.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/mongoose": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.0.0.tgz",
"integrity": "sha512-PzwkLgm1Jhj0NQdgGfnFsu0QP9V1sBFgbavEgh/IPAUzKAagzvEhuaBuAQOQGjczVWnpIU9tBqyd02cOTgsPlA==",
"dependencies": {
"bson": "^6.2.0",
"kareem": "2.5.1",
"mongodb": "6.2.0",
"mpath": "0.9.0",
"mquery": "5.0.0",
"ms": "2.1.3",
"sift": "16.0.1"
},
"engines": {
"node": ">=16.20.1"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mongoose"
}
},
"node_modules/mongoose/node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
"node_modules/mpath": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz",
"integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==",
"engines": {
"node": ">=4.0.0"
}
},
"node_modules/mquery": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz",
"integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==",
"dependencies": {
"debug": "4.x"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/mrmime": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz",
@ -11194,7 +11367,6 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
"dev": true,
"engines": {
"node": ">=6"
}
@ -12080,6 +12252,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/sift": {
"version": "16.0.1",
"resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz",
"integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ=="
},
"node_modules/signal-exit": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
@ -12216,7 +12393,7 @@
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
"integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
"dev": true,
"devOptional": true,
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
@ -12298,7 +12475,7 @@
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
"integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
"dev": true,
"devOptional": true,
"dependencies": {
"ip": "^2.0.0",
"smart-buffer": "^4.2.0"
@ -12392,6 +12569,14 @@
"node": ">=0.10.0"
}
},
"node_modules/sparse-bitfield": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
"integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==",
"dependencies": {
"memory-pager": "^1.0.2"
}
},
"node_modules/spdx-correct": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",

1
package.json

@ -25,6 +25,7 @@
"express": "^4.18.2",
"express-jwt": "^8.4.1",
"moment": "^2.29.4",
"mongoose": "^8.0.0",
"multer": "^1.4.5-lts.1",
"node-jsonwebtoken": "^0.0.1",
"nodemon": "^3.0.1",

19
server.js

@ -26,9 +26,9 @@ app.route('/api/login').post(loginRoute);
const RSA_PRIVATE_KEY = fs.readFileSync('./private.key');
const RSA_PUBLIC_KEY = fs.readFileSync('./public.key');
const checkIfAuthenticated = expressJwt({
secret: RSA_PUBLIC_KEY
});
//const checkIfAuthenticated = expressJwt({
// secret: RSA_PUBLIC_KEY
//});
/*export */function loginRoute(req, res) {
@ -68,8 +68,17 @@ app.get('/api/seasons', (req, res) => {
seasonCardImage: "",
seasonHeaderImage: "",
seasonStartDate: "",
seasonSendDate: "",
seasonId: "",
seasonEndDate: "",
seasonDesc: "",
},
{
id: 2,
seasonName: "Season 2",
seasonTag: "Post Winter Blues",
seasonCardImage: "",
seasonHeaderImage: "",
seasonStartDate: "",
seasonEndDate: "",
seasonDesc: "",
}]
res.json({seasons: seasons});

6
src/app/app.module.ts

@ -25,6 +25,8 @@ import { MatTabsModule } from '@angular/material/tabs';
import { LoginComponent } from './components/login/login.component';
import { ReactiveFormsModule } from '@angular/forms';
import { ObserversModule } from '@angular/cdk/observers';
import { AdminComponent } from './components/admin/admin.component';
import { NewSeasonCardComponent } from './components/new-season-card/new-season-card.component';
@NgModule({
declarations: [
@ -38,7 +40,9 @@ import { ObserversModule } from '@angular/cdk/observers';
SeasonCardComponent,
SeasonsComponent,
SeasonDetailsComponent,
LoginComponent
LoginComponent,
AdminComponent,
NewSeasonCardComponent
],
imports: [
BrowserModule,

7
src/app/components/admin/admin.component.html

@ -0,0 +1,7 @@
<div *ngIf="isLoggedIn">
<button></button>
</div>
<div *ngIf="!isLoggedIn">
</div>

0
src/app/components/admin/admin.component.less

21
src/app/components/admin/admin.component.spec.ts

@ -0,0 +1,21 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AdminComponent } from './admin.component';
describe('AdminComponent', () => {
let component: AdminComponent;
let fixture: ComponentFixture<AdminComponent>;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [AdminComponent]
});
fixture = TestBed.createComponent(AdminComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

21
src/app/components/admin/admin.component.ts

@ -0,0 +1,21 @@
import { Component } from '@angular/core';
import { AuthService } from 'src/app/services/auth-service';
@Component({
selector: 'app-admin',
templateUrl: './admin.component.html',
styleUrls: ['./admin.component.less']
})
export class AdminComponent {
constructor( private authService :AuthService)
{
}
isLoggedIn()
{
return this.authService.isLoggedIn();
}
}

7
src/app/components/new-season-card/new-season-card.component.html

@ -0,0 +1,7 @@
<mat-card class="example-card">
<mat-card-header>
<div mat-card-avatar class="example-header-image"></div>
<mat-card-title>New Season</mat-card-title>
</mat-card-header>
<mat-icon>add</mat-icon>
</mat-card>

9
src/app/components/new-season-card/new-season-card.component.less

@ -0,0 +1,9 @@
.example-card {
max-width: 400px;
min-width: 400px;
}
.example-header-image {
background-image: url('https://material.angular.io/assets/img/examples/shiba1.jpg');
background-size: cover;
}

21
src/app/components/new-season-card/new-season-card.component.spec.ts

@ -0,0 +1,21 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { NewSeasonCardComponent } from './new-season-card.component';
describe('NewSeasonCardComponent', () => {
let component: NewSeasonCardComponent;
let fixture: ComponentFixture<NewSeasonCardComponent>;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [NewSeasonCardComponent]
});
fixture = TestBed.createComponent(NewSeasonCardComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

10
src/app/components/new-season-card/new-season-card.component.ts

@ -0,0 +1,10 @@
import { Component } from '@angular/core';
@Component({
selector: 'app-new-season-card',
templateUrl: './new-season-card.component.html',
styleUrls: ['./new-season-card.component.less']
})
export class NewSeasonCardComponent {
}

9
src/app/components/seasons/seasons.component.html

@ -1,5 +1,6 @@
<div *ngIf="seasons">
<div *ngFor="let season of seasons">
<app-season-card [season]="season"></app-season-card>
</div>
<div *ngIf="seasons" class="grid">
<ng-container *ngFor="let season of seasons">
<app-season-card [season]="season" class="grid-item"></app-season-card>
</ng-container>
<app-new-season-card *ngIf="isLoggedIn" class="grid-item"></app-new-season-card>
</div>

13
src/app/components/seasons/seasons.component.less

@ -0,0 +1,13 @@
.grid{
display: flex;
flex-direction: row; // fxLayout
flex-wrap: wrap; //fxLayout
box-sizing: border-box;
align-content: stretch; // fxLayoutAlign
align-items: stretch; // fxLayoutAlign
justify-content: flex-start; // fxLayoutAlign
}
.grid-item{
margin-right: 1rem;
}

9
src/app/components/seasons/seasons.component.ts

@ -1,6 +1,7 @@
import { Component } from '@angular/core';
import { Season } from '../../models/season';
import { ApiService } from '../../services/api.service';
import { AuthService } from 'src/app/services/auth-service';
@Component({
selector: 'app-seasons',
@ -12,7 +13,8 @@ export class SeasonsComponent
{
seasons: Season[];
constructor(private apiService: ApiService)
constructor(private apiService: ApiService,
private authService: AuthService)
{
this.seasons = [];
};
@ -22,4 +24,9 @@ export class SeasonsComponent
this.seasons = (data as any).seasons;
});
}
isLoggedIn()
{
return this.authService.isLoggedIn();
}
}

7
src/app/models/season.ts

@ -4,10 +4,6 @@ export interface Season {
seasonTag: string;
seasonCardImage: string;
seasonHeaderImage: string;
seasonStartDate: string;
seasonSendDate: string;
seasonId: string;
seasonDesc: string;
}
export interface BridgeUser {
@ -30,7 +26,10 @@ export interface SeasonWeekEntry {
export interface SeasonWeek {
id: string;
seasonId: string;
mapName: string;
mapImg: string;
seasonStartDate: string;
seasonEndDate: string;
entries: SeasonWeekEntry[];
}
Loading…
Cancel
Save