-
-
-
-
+
+
+
+
+
diff --git a/source/ticketUI/src/app/app.component.scss b/source/ticketUI/src/app/app.component.scss
index e69de29..586e9a8 100644
--- a/source/ticketUI/src/app/app.component.scss
+++ b/source/ticketUI/src/app/app.component.scss
@@ -0,0 +1,25 @@
+/* The sidebar menu */
+.sidenav {
+ height: 100%; /* Full-height: remove this if you want "auto" height */
+ width: 120px; /* Set the width of the sidebar */
+ position: fixed; /* Fixed Sidebar (stay in place on scroll) */
+ z-index: 1; /* Stay on top */
+ top: 0; /* Stay at the top */
+ left: 0;
+ backdrop-filter: blur(25px) saturate(112%);
+ -webkit-backdrop-filter: blur(25px) saturate(112%);
+ background-color: rgba(255, 255, 255, 0.11);
+ overflow-x: hidden; /* Disable horizontal scroll */
+}
+
+/* Style page content */
+.main {
+ margin-left: 120px; /* Same as the width of the sidebar */
+ padding: 0px 10px;
+}
+
+/* On smaller screens, where height is less than 450px, change the style of the sidebar (less padding and a smaller font size) */
+@media screen and (max-height: 450px) {
+ .sidenav {}
+ .sidenav a {font-size: 18px;}
+}
diff --git a/source/ticketUI/src/app/app.routes.ts b/source/ticketUI/src/app/app.routes.ts
index fa11451..c549f80 100644
--- a/source/ticketUI/src/app/app.routes.ts
+++ b/source/ticketUI/src/app/app.routes.ts
@@ -1,9 +1,24 @@
-import { Routes } from '@angular/router';
+import {Routes} from '@angular/router';
import {DebugComponent} from './page/debug/debug.component';
+import {EventComponent} from './page/event/event.component';
+import {TicketComponent} from './page/ticket/ticket.component';
+import {ScanComponent} from './page/scan/scan.component';
export const routes: Routes = [
{
path: 'debug',
component: DebugComponent
+ },
+ {
+ path: 'event',
+ component: EventComponent
+ },
+ {
+ path: 'ticket',
+ component: TicketComponent
+ },
+ {
+ path: 'scan',
+ component: ScanComponent
}
];
diff --git a/source/ticketUI/src/app/page/debug/debug.component.spec.ts b/source/ticketUI/src/app/page/debug/debug.component.spec.ts
deleted file mode 100644
index 38528ea..0000000
--- a/source/ticketUI/src/app/page/debug/debug.component.spec.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { DebugComponent } from './debug.component';
-
-describe('DebugComponent', () => {
- let component: DebugComponent;
- let fixture: ComponentFixture
;
-
- beforeEach(async () => {
- await TestBed.configureTestingModule({
- imports: [DebugComponent]
- })
- .compileComponents();
-
- fixture = TestBed.createComponent(DebugComponent);
- component = fixture.componentInstance;
- fixture.detectChanges();
- });
-
- it('should create', () => {
- expect(component).toBeTruthy();
- });
-});
diff --git a/source/ticketUI/src/app/page/debug/debug.component.ts b/source/ticketUI/src/app/page/debug/debug.component.ts
index af85c93..d0b5515 100644
--- a/source/ticketUI/src/app/page/debug/debug.component.ts
+++ b/source/ticketUI/src/app/page/debug/debug.component.ts
@@ -20,6 +20,6 @@ export class DebugComponent {
ticketType: TicketTypeEnum.Single
};
- this.ticketMinter.mintTicket(mintRequest);
+ this.ticketMinter.addTicket(mintRequest);
}
}
diff --git a/source/ticketUI/src/app/page/event/event.component.html b/source/ticketUI/src/app/page/event/event.component.html
new file mode 100644
index 0000000..8a7c90c
--- /dev/null
+++ b/source/ticketUI/src/app/page/event/event.component.html
@@ -0,0 +1 @@
+event works!
diff --git a/source/ticketUI/src/app/page/event/event.component.scss b/source/ticketUI/src/app/page/event/event.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/source/ticketUI/src/app/page/event/event.component.ts b/source/ticketUI/src/app/page/event/event.component.ts
new file mode 100644
index 0000000..ee6181f
--- /dev/null
+++ b/source/ticketUI/src/app/page/event/event.component.ts
@@ -0,0 +1,11 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-event',
+ imports: [],
+ templateUrl: './event.component.html',
+ styleUrl: './event.component.scss'
+})
+export class EventComponent {
+
+}
diff --git a/source/ticketUI/src/app/page/scan/scan.component.html b/source/ticketUI/src/app/page/scan/scan.component.html
new file mode 100644
index 0000000..c706b4d
--- /dev/null
+++ b/source/ticketUI/src/app/page/scan/scan.component.html
@@ -0,0 +1 @@
+scan works!
diff --git a/source/ticketUI/src/app/page/scan/scan.component.scss b/source/ticketUI/src/app/page/scan/scan.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/source/ticketUI/src/app/page/scan/scan.component.ts b/source/ticketUI/src/app/page/scan/scan.component.ts
new file mode 100644
index 0000000..c92f5c0
--- /dev/null
+++ b/source/ticketUI/src/app/page/scan/scan.component.ts
@@ -0,0 +1,11 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-scan',
+ imports: [],
+ templateUrl: './scan.component.html',
+ styleUrl: './scan.component.scss'
+})
+export class ScanComponent {
+
+}
diff --git a/source/ticketUI/src/app/page/ticket/ticket.component.html b/source/ticketUI/src/app/page/ticket/ticket.component.html
new file mode 100644
index 0000000..9d31e5c
--- /dev/null
+++ b/source/ticketUI/src/app/page/ticket/ticket.component.html
@@ -0,0 +1 @@
+ticket works!
diff --git a/source/ticketUI/src/app/page/ticket/ticket.component.scss b/source/ticketUI/src/app/page/ticket/ticket.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/source/ticketUI/src/app/page/ticket/ticket.component.ts b/source/ticketUI/src/app/page/ticket/ticket.component.ts
new file mode 100644
index 0000000..9a2e826
--- /dev/null
+++ b/source/ticketUI/src/app/page/ticket/ticket.component.ts
@@ -0,0 +1,11 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-ticket',
+ imports: [],
+ templateUrl: './ticket.component.html',
+ styleUrl: './ticket.component.scss'
+})
+export class TicketComponent {
+
+}
diff --git a/source/ticketUI/src/app/services/api-utils.ts b/source/ticketUI/src/app/services/api-utils.ts
new file mode 100644
index 0000000..6599bde
--- /dev/null
+++ b/source/ticketUI/src/app/services/api-utils.ts
@@ -0,0 +1,31 @@
+import {HttpHeaders, HttpParams} from '@angular/common/http';
+
+export class ApiUtils {
+ public setHttpRequestOptions(params?: any): any {
+ let headers: HttpHeaders = new HttpHeaders();
+ headers = headers.set('Content-Type', 'application/json');
+
+ const options: any = {
+ headers,
+ observe: 'response'
+ };
+
+ if (params) {
+ options.params = this.setHttpParams(params);
+ }
+
+ return options;
+ }
+
+ private setHttpParams(query: object): HttpParams {
+ const params = new HttpParams();
+ for (const key in query) {
+ // @ts-ignore
+ if (query[key] && query.hasOwnProperty(key)) {
+ // @ts-ignore
+ params.append(key, query[key]);
+ }
+ }
+ return params;
+ }
+}
diff --git a/source/ticketUI/src/app/services/event.service.ts b/source/ticketUI/src/app/services/event.service.ts
new file mode 100644
index 0000000..1cbc82b
--- /dev/null
+++ b/source/ticketUI/src/app/services/event.service.ts
@@ -0,0 +1,48 @@
+import {inject, Injectable} from '@angular/core';
+import {HttpClient} from '@angular/common/http';
+import {AddEventRequest} from '../../models/request/add-event-request';
+import {ApiUtils} from './api-utils';
+import {environment} from '../../environments/environment';
+import {Endpoints} from '../../models/endpoints';
+import {catchError, of} from 'rxjs';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class EventService extends ApiUtils {
+ private httpClient = inject(HttpClient);
+
+ constructor() {
+ super();
+ }
+
+ public addEvent(request: AddEventRequest): void {
+ //TODO: Remove hard coded venue and talent information
+
+ request.talent = {
+ name: 'Parma Symphony Orchestra',
+ description: 'Parma Symphony Orchestra is a Northeast Ohio community orchestra with over 50 years of history bringing classical music to people of all ages, with opportunities for local students and professional guests to perform a wide ranging repertoire.',
+ };
+
+ request.venue = {
+ name: 'Valley Forge High School',
+ description: 'Auditorium',
+ addressOne: '9999 Independence Blvd',
+ addressTwo: null,
+ city: 'Parma',
+ state: 'Ohio',
+ zip: '44130'
+ };
+
+ const options = this.setHttpRequestOptions();
+ const url = environment.apiBase + Endpoints.EVENT;
+
+ this.httpClient.post(url, JSON.stringify(request), options)
+ .pipe(
+ catchError(error => {
+ console.log(error);
+ return of(undefined);
+ })
+ ).subscribe();
+ }
+}
diff --git a/source/ticketUI/src/app/services/ticket.service.ts b/source/ticketUI/src/app/services/ticket.service.ts
index fdeb062..841e9b3 100644
--- a/source/ticketUI/src/app/services/ticket.service.ts
+++ b/source/ticketUI/src/app/services/ticket.service.ts
@@ -1,24 +1,27 @@
-import {Injectable} from '@angular/core';
-import {HttpClient, HttpHeaders, HttpParams} from '@angular/common/http';
+import {inject, Injectable} from '@angular/core';
+import {HttpClient} from '@angular/common/http';
import {signal} from '@angular/core';
import {catchError, map, of} from 'rxjs';
import {environment} from '../../environments/environment';
import {MintResponse} from '../../models/response/mint-response';
import {Endpoints} from '../../models/endpoints';
import {MintRequest} from '../../models/request/mint-request';
+import {ApiUtils} from './api-utils';
@Injectable({
providedIn: 'root'
})
-export class TicketService {
+export class TicketService extends ApiUtils {
public dataSignal = signal('');
+ private httpClient = inject(HttpClient);
- constructor(public httpClient: HttpClient) {
+ constructor() {
+ super();
}
- public mintTicket(request: MintRequest): void {
- const options = this.setHttpRequestOptions();
- const url = environment.apiBase + Endpoints.MINT_TICKETS;
+ public addTicket(request: MintRequest): void {
+ const options = this.setHttpRequestOptions();
+ const url = environment.apiBase + Endpoints.TICKET;
this.httpClient.post(url, JSON.stringify(request), options)
.pipe(
@@ -31,34 +34,6 @@ export class TicketService {
if (res !== undefined) {
this.dataSignal.set(res.qrCode);
}
- })
- }
-
- private setHttpRequestOptions(params?: any): any {
- let headers: HttpHeaders = new HttpHeaders();
- headers = headers.set('Content-Type', 'application/json');
-
- const options: any = {
- headers,
- observe: 'response'
- };
-
- if (params) {
- options.params = this.setHttpParams(params);
- }
-
- return options;
- }
-
- private setHttpParams(query: object): HttpParams {
- const params = new HttpParams();
- for (const key in query) {
- // @ts-ignore
- if (query[key] && query.hasOwnProperty(key)) {
- // @ts-ignore
- params.append(key, query[key]);
- }
- }
- return params;
+ });
}
}
diff --git a/source/ticketUI/src/app/sidebar/sidebar.component.html b/source/ticketUI/src/app/sidebar/sidebar.component.html
index 9e99c43..73f7142 100644
--- a/source/ticketUI/src/app/sidebar/sidebar.component.html
+++ b/source/ticketUI/src/app/sidebar/sidebar.component.html
@@ -1,8 +1,8 @@
-
-
-
+
+
+
@if(!environment.production) {
-
+
}
diff --git a/source/ticketUI/src/app/sidebar/sidebar.component.scss b/source/ticketUI/src/app/sidebar/sidebar.component.scss
index e69de29..3ca0c17 100644
--- a/source/ticketUI/src/app/sidebar/sidebar.component.scss
+++ b/source/ticketUI/src/app/sidebar/sidebar.component.scss
@@ -0,0 +1,17 @@
+.sidebar-button {
+ margin: 5px;
+ padding: 5px;
+ backdrop-filter: blur(25px) saturate(112%);
+ -webkit-backdrop-filter: blur(25px) saturate(112%);
+ background-color: rgba(255, 255, 255, 0.11);
+ border: 1px solid rgba(255, 255, 255, 0.125);
+ border-radius: 8px;
+
+ &:hover {
+ background-color: rgba(255, 255, 255, 0.0);
+ }
+
+ &:active {
+ background-color: rgba(255, 255, 255, 0.25);
+ }
+}
diff --git a/source/ticketUI/src/app/sidebar/sidebar.component.spec.ts b/source/ticketUI/src/app/sidebar/sidebar.component.spec.ts
deleted file mode 100644
index 5445f3c..0000000
--- a/source/ticketUI/src/app/sidebar/sidebar.component.spec.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { SidebarComponent } from './sidebar.component';
-
-describe('SidebarComponent', () => {
- let component: SidebarComponent;
- let fixture: ComponentFixture;
-
- beforeEach(async () => {
- await TestBed.configureTestingModule({
- imports: [SidebarComponent]
- })
- .compileComponents();
-
- fixture = TestBed.createComponent(SidebarComponent);
- component = fixture.componentInstance;
- fixture.detectChanges();
- });
-
- it('should create', () => {
- expect(component).toBeTruthy();
- });
-});
diff --git a/source/ticketUI/src/models/core/talent.ts b/source/ticketUI/src/models/core/talent.ts
new file mode 100644
index 0000000..b843a8e
--- /dev/null
+++ b/source/ticketUI/src/models/core/talent.ts
@@ -0,0 +1,4 @@
+export interface Talent {
+ name: string;
+ description: string;
+}
diff --git a/source/ticketUI/src/models/core/venue.ts b/source/ticketUI/src/models/core/venue.ts
new file mode 100644
index 0000000..bf9cfff
--- /dev/null
+++ b/source/ticketUI/src/models/core/venue.ts
@@ -0,0 +1,9 @@
+export interface Venue {
+ name: string,
+ description: string,
+ addressOne: string,
+ addressTwo: string | null,
+ city: string,
+ state: string,
+ zip: string,
+}
diff --git a/source/ticketUI/src/models/endpoints.ts b/source/ticketUI/src/models/endpoints.ts
index 56d6f00..a315e8e 100644
--- a/source/ticketUI/src/models/endpoints.ts
+++ b/source/ticketUI/src/models/endpoints.ts
@@ -1,4 +1,5 @@
export class Endpoints {
public static readonly TICKET = 'ticket';
- public static readonly MINT_TICKETS = Endpoints.TICKET + '/mint'
+
+ public static readonly EVENT = 'events';
}
diff --git a/source/ticketUI/src/models/request/add-event-request.ts b/source/ticketUI/src/models/request/add-event-request.ts
new file mode 100644
index 0000000..65a5410
--- /dev/null
+++ b/source/ticketUI/src/models/request/add-event-request.ts
@@ -0,0 +1,10 @@
+import {Venue} from '../core/venue';
+import {Talent} from '../core/talent';
+
+export interface AddEventRequest {
+ date: Date,
+ eventName: string,
+ eventDescription: string,
+ venue: Venue,
+ talent: Talent,
+}