diff --git a/README.md b/README.md index 55c6f21..b59b0ce 100644 --- a/README.md +++ b/README.md @@ -13,58 +13,3 @@ ## Contributing All pull requests must be branched off of and then requested to merge into the [dev](https://github.com/danerwilliams/ruski/tree/dev) branch. We will periodically merge the dev branch into the main prod branch as releases. - -## Configurations -### Environment Variables -Environment variables must either be set or included in .env file inside of the backend folder. -##### Backend -AWS access keys for S3 uploading: -Be sure to use `sudo -E` when running node on port 80 to pass environment variables to the root user. -`ACCESS_KEY_ID=******************` -`SECRET_ACCESS_KEY=****************************` - -### Cron -Run `crontab -e` to edit your crontab and add the following line: -`11 23 * * * ~/ruski/backend/cronjob-script.py 1> ~/ruski/backend/yack-beer-totals.json` - -### S3 -##### Bucket policy -``` -{ - "Version": "2008-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": { - "AWS": "arn:aws:iam::***********:user/username" - }, - "Action": "s3:PutObject", - "Resource": "arn:aws:s3:::myBucket/*" - }, - { - "Effect": "Allow", - "Principal": "*", - "Action": "s3:GetObject", - "Resource": "arn:aws:s3:::myBucket/*" - } - ] -} -``` - -##### CORS policy -``` -[ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "PUT" - ], - "AllowedOrigins": [ - "*" - ], - "ExposeHeaders": [] - } -] -``` diff --git a/backend/cronjob-script.py b/backend/cronjob-script.py index b45f7aa..c4c29df 100755 --- a/backend/cronjob-script.py +++ b/backend/cronjob-script.py @@ -39,8 +39,9 @@ def main(): result['yacks'] = yaks result['beers'] = beers - print(json.dumps(result)) + with open('yack-beer-totals.json', 'w') as file: + json.dump(result, file) if __name__ == '__main__': - main() + main() \ No newline at end of file diff --git a/backend/graphql/objects.js b/backend/graphql/objects.js index 203f0b1..6f068bd 100644 --- a/backend/graphql/objects.js +++ b/backend/graphql/objects.js @@ -1,5 +1,5 @@ const { GraphQLObjectType, GraphQLString, GraphQLInt, - GraphQLID, GraphQLList } = require('graphql'); + GraphQLID, GraphQLList} = require('graphql'); const { GraphQLDateTime } = require('graphql-iso-date'); const User = require('../models/user'); @@ -18,26 +18,26 @@ const EloType = new GraphQLObjectType({ }); const UserType = new GraphQLObjectType({ - name: 'User', + name: 'User', fields: () => ({ id: { type: GraphQLID }, handle: { type: GraphQLString }, name: { type: GraphQLString }, email: { type: GraphQLString }, elo: { type: GraphQLInt }, - elo_history: { + elo_history: { type: new GraphQLList(EloType), - resolve(parent, args) { - return Elo.find({ '_id': { $in: parent.elo_history_ids } }); + resolve(parent, args){ + return Elo.find({'_id': { $in: parent.elo_history_ids}}); } }, friends: { type: new GraphQLList(UserType), - resolve(parent, args) { - return User.find({ '_id': { $in: parent.friend_ids } }); + resolve(parent, args){ + return User.find({'_id': { $in: parent.friend_ids }}); } }, - profile_url: { type: GraphQLString } + profile_url: { type: GraphQLString} }) }); @@ -47,12 +47,12 @@ const PlayerType = new GraphQLObjectType({ id: { type: GraphQLID }, cups: { type: GraphQLInt }, penalties: { type: GraphQLInt }, - user: { + user: { type: UserType, - resolve(parent, args) { + resolve(parent, args){ return User.findById(parent.user_id); } - } + } }) }); @@ -65,15 +65,15 @@ const CommentType = new GraphQLObjectType({ text: { type: GraphQLString }, likes: { type: GraphQLInt }, user: { - type: UserType, - resolve(parent, args) { + type: UserType, + resolve(parent, args){ return User.findById(parent.user_id); } }, liked_by: { - type: new GraphQLList(UserType), - resolve(parent, args) { - return User.find({ '_id': { $in: parent.liked_by_ids } }); + type: UserType, + resolve(parent, args){ + return User.find({'_id': {$in: parent.liked_by_ids}}); } } }) @@ -87,29 +87,29 @@ const GameType = new GraphQLObjectType({ updatedAt: { type: GraphQLDateTime }, location: { type: GraphQLString }, description: { type: GraphQLString }, - likes: { type: GraphQLInt }, + likes: { type: GraphQLInt }, winning_team: { type: new GraphQLList(PlayerType), - resolve(parent, args) { - return Player.find({ '_id': { $in: parent.winning_team_player_ids } }); + resolve(parent, args){ + return Player.find({'_id': { $in: parent.winning_team_player_ids }}); } }, losing_team: { type: new GraphQLList(PlayerType), - resolve(parent, args) { - return Player.find({ '_id': { $in: parent.losing_team_player_ids } }); + resolve(parent, args){ + return Player.find({'_id': { $in: parent.losing_team_player_ids }}); } }, comments: { type: new GraphQLList(CommentType), - resolve(parent, args) { - return Comment.find({ '_id': { $in: parent.comment_ids } }); + resolve(parent, args){ + return Comment.find({'_id': { $in: parent.comment_ids }}); } }, liked_by: { - type: new GraphQLList(UserType), - resolve(parent, args) { - return User.find({ '_id': { $in: parent.liked_by_ids } }); + type: UserType, + resolve(parent, args){ + return User.find({'_id': {$in: parent.liked_by_ids}}); } } }) diff --git a/backend/graphql/schemas.js b/backend/graphql/schemas.js index c017ebe..16c3138 100644 --- a/backend/graphql/schemas.js +++ b/backend/graphql/schemas.js @@ -47,13 +47,6 @@ const RootQuery = new GraphQLObjectType({ return User.find({email: args.email}); } }, - userByHandle: { - type: new GraphQLList(UserType), - args: { handle: { type: GraphQLString} }, - resolve(parent, args) { - return User.find({handle: args.handle}); - } - }, users: { type: new GraphQLList(UserType), resolve(parent, args) { @@ -403,7 +396,7 @@ const Mutation = new GraphQLObjectType({ return Game.findById(args.id) .then(response => { let new_liked_by_id = mongoose.Types.ObjectId(args.liked_by_id); - filtered = response.liked_by_ids.filter(function(el) { return el != args.liked_by_id}); + response.liked_by_ids.push(new_liked_by_id); return Game.findByIdAndUpdate( args.id, { @@ -413,7 +406,7 @@ const Mutation = new GraphQLObjectType({ description: response.description, comment_ids: response.comment_ids, likes: response.likes - 1, - liked_by_ids: filtered + liked_by_ids: response.liked_by_ids } ); }); @@ -452,14 +445,14 @@ const Mutation = new GraphQLObjectType({ return Comment.findById(args.id) .then(response => { let new_liked_by_id = mongoose.Types.ObjectId(args.liked_by_id); - filtered = response.liked_by_ids.filter(function(el) { return el != args.liked_by_id}); + response.liked_by_ids.push(new_liked_by_id); return Comment.findByIdAndUpdate( args.id, { text: response.text, user_id: response.user_id, likes: response.likes - 1, - liked_by_ids: filtered + liked_by_ids: response.liked_by_ids } ); }); @@ -560,30 +553,7 @@ const Mutation = new GraphQLObjectType({ }); } }, - modifyName: { - type: UserType, - args: { - id: {type: new GraphQLNonNull(GraphQLID)}, - name: {type: new GraphQLNonNull(GraphQLString)} - }, - resolve(parent, args){ - return User.findById(args.id) - .then(response => { - return User.findByIdAndUpdate( - args.id, - { - handle: response.handle, - name: args.name, - email: response.email, - elo: response.elo, - elo_history_ids: response.elo_history_ids, - friend_ids: response.friend_ids - } - ); - }); - } - }, - addCommentToGame: { + addComment: { type: GameType, args: { id: {type: new GraphQLNonNull(GraphQLID)}, @@ -592,7 +562,7 @@ const Mutation = new GraphQLObjectType({ resolve(parent, args){ return Game.findById(args.id) .then(response => { - let new_comment_id = mongoose.Types.ObjectId(args.comment_id); + let new_comment_id = mongoose.Types.ObjectId(args.friend_id); response.comment_ids.push(new_comment_id); return Game.findByIdAndUpdate( args.id, @@ -607,33 +577,7 @@ const Mutation = new GraphQLObjectType({ ) }); } - }, - deleteCommentFromGame: { - type: GameType, - args: { - id: {type: new GraphQLNonNull(GraphQLID)}, - comment_id: {type: new GraphQLNonNull(GraphQLID)} - }, - resolve(parent, args){ - return Game.findById(args.id) - .then(response => { - let new_comment_id = mongoose.Types.ObjectId(args.comment_id); - filtered = response.comment_ids.filter(function(el) { return el != args.comment_id}); - return Game.findByIdAndUpdate( - args.id, - { - winning_team_player_ids: response.winning_team_player_ids, - losing_team_player_ids: response.losing_team_player_ids, - location: response.location, - description: response.description, - comment_ids: filtered, - likes: response.likes - } - ) - }); - } } - } }); diff --git a/backend/server.js b/backend/server.js index b7a18ec..4830ba0 100644 --- a/backend/server.js +++ b/backend/server.js @@ -31,10 +31,6 @@ connection.once("open", function () { console.log("MongoDB database connection established successfully"); }); -app.get("/", (req, res) => { - res.send('cum'); -}); - // api endpoint for getting beer and yak totals from yack-beer-totals.json app.get("/get_yack_beer_totals", (req, res) => { res.send(fs.readFileSync('./yack-beer-totals.json', 'utf8')); @@ -83,7 +79,7 @@ app.get("/get_presigned_url_png/:user_id", (req, res) => { success: true, message: "AWS SDK S3 Pre-signed urls generated successfully.", presigned_url: url, - cdn_access_url: `https://d26n5v24zcmg6e.cloudfront.net/${params.Key}`, + cdn_access_url: `https://d26n5v24zcmg6e.cloudfront.net/${params.Key}.png`, }); } }); @@ -99,5 +95,5 @@ app.use( ); app.listen(4000, () => { - console.log("Running a GraphQL API server at http://localhost/graphql (port 80)"); + console.log("Running a GraphQL API server at http://localhost:4000/graphql"); }); diff --git a/frontend/ruski-app/package-lock.json b/frontend/ruski-app/package-lock.json index 9f3a81a..0247eed 100644 --- a/frontend/ruski-app/package-lock.json +++ b/frontend/ruski-app/package-lock.json @@ -6161,11 +6161,6 @@ "tslib": "^2.1.0" } }, - "hammerjs": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", - "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=" - }, "handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", @@ -8554,21 +8549,6 @@ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", "dev": true }, - "ngx-image-cropper": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/ngx-image-cropper/-/ngx-image-cropper-3.3.5.tgz", - "integrity": "sha512-0yRVKG5XAbVo3rOaj/iFDlekGsxEqXKU9iXFbjyvHvRT2DFs+AjwtyvINsHCWw+4ed9yA4Y+wLIUNqzA0bfxLw==", - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", diff --git a/frontend/ruski-app/package.json b/frontend/ruski-app/package.json index 527f777..8c1e1f7 100644 --- a/frontend/ruski-app/package.json +++ b/frontend/ruski-app/package.json @@ -26,8 +26,6 @@ "@types/gapi.auth2": "0.0.54", "apollo-angular": "^2.4.0", "graphql": "^15.5.0", - "hammerjs": "^2.0.8", - "ngx-image-cropper": "^3.3.5", "rxjs": "~6.6.0", "tslib": "^2.0.0", "zone.js": "~0.11.3" diff --git a/frontend/ruski-app/src/app/graphql.module.ts b/frontend/ruski-app/src/app/graphql.module.ts index 0013ceb..b6a65c5 100644 --- a/frontend/ruski-app/src/app/graphql.module.ts +++ b/frontend/ruski-app/src/app/graphql.module.ts @@ -2,9 +2,8 @@ import {NgModule} from '@angular/core'; import {APOLLO_OPTIONS} from 'apollo-angular'; import {ApolloClientOptions, InMemoryCache} from '@apollo/client/core'; import {HttpLink} from 'apollo-angular/http'; -import {environment} from '../environments/environment'; -const uri = environment.api + '/graphql'; // <-- add the URL of the GraphQL server here +const uri = 'http://localhost:4000/graphql'; // <-- add the URL of the GraphQL server here export function createApollo(httpLink: HttpLink): ApolloClientOptions { return { link: httpLink.create({uri}), diff --git a/frontend/ruski-app/src/app/modules/auth/auth.guard.ts b/frontend/ruski-app/src/app/modules/auth/auth.guard.ts index 32f4c05..72e85c6 100644 --- a/frontend/ruski-app/src/app/modules/auth/auth.guard.ts +++ b/frontend/ruski-app/src/app/modules/auth/auth.guard.ts @@ -29,10 +29,6 @@ export class AuthGuard implements CanActivate { | boolean | UrlTree { const url: string = state.url; - console.log('here'); - if (this.hundler.getStatus()) { - return true; - } return this.hundler.checkUserExistsByEmail().pipe( map((response: any) => { console.log(response); diff --git a/frontend/ruski-app/src/app/modules/auth/register/register.component.ts b/frontend/ruski-app/src/app/modules/auth/register/register.component.ts index 887e787..7646944 100644 --- a/frontend/ruski-app/src/app/modules/auth/register/register.component.ts +++ b/frontend/ruski-app/src/app/modules/auth/register/register.component.ts @@ -36,7 +36,7 @@ export class RegisterComponent implements OnInit { } }); this.reg.fetchAllHandles().subscribe((response) => { - // console.l/og(response); + console.log(response); for (const user of response) { this.allHandles.add(user.handle); } @@ -77,24 +77,24 @@ export class RegisterComponent implements OnInit { return; } this.errorFlag = false; - this.hundler.changeRegistered(); if (this.nameIdMap.has(userName)) { const userId = this.nameIdMap.get(userName); this.reg.submitHandle(userId, userHandle); - this.reg.submitEmail(userId).subscribe((response) => { - this.router.navigate(['/main']); - }); + this.reg.submitEmail(userId); } else { + console.log('HEREE'); this.reg.genUser(userName).subscribe((response) => { - // console.log('HERE'); + console.log('HERE'); const userId = response; this.reg.submitHandle(userId, userHandle); - this.reg.submitEmail(userId).subscribe((response) => { - // console.log(response); - this.router.navigate(['/main']); - }); + this.reg.submitEmail(userId); }); } + + // Submit email + this.hundler.changeRegistered(); + console.log(this.hundler.getStatus()); + this.router.navigate(['/main']); } private _filter(value: string): string[] { diff --git a/frontend/ruski-app/src/app/modules/auth/services/handler.service.ts b/frontend/ruski-app/src/app/modules/auth/services/handler.service.ts index d11911e..0002409 100644 --- a/frontend/ruski-app/src/app/modules/auth/services/handler.service.ts +++ b/frontend/ruski-app/src/app/modules/auth/services/handler.service.ts @@ -22,6 +22,7 @@ export class HandlerService { } checkUserExistsByEmail() { + console.log(); const GET_USER = gql` query UserByEmail($email: String!) { userByEmail(email: $email) { @@ -32,21 +33,15 @@ export class HandlerService { return this.auth.user$.pipe( switchMap((response: any) => { const email = response.email; - // console.log(response); + return this.apollo .query({ query: GET_USER, variables: { email: email, }, - fetchPolicy: 'no-cache', }) - .pipe( - map((response) => { - // console.log(response); - return response.data.userByEmail; - }) - ); + .pipe(map((response) => response.data.userByEmail)); }) ); } diff --git a/frontend/ruski-app/src/app/modules/auth/services/register.service.ts b/frontend/ruski-app/src/app/modules/auth/services/register.service.ts index 555963c..87e5aa3 100644 --- a/frontend/ruski-app/src/app/modules/auth/services/register.service.ts +++ b/frontend/ruski-app/src/app/modules/auth/services/register.service.ts @@ -67,8 +67,6 @@ export class RegisterService { mutation ModifyHandle($id: ID!, $handle: String!) { modifyHandle(id: $id, handle: $handle) { id - handle - name } } `; @@ -98,20 +96,35 @@ export class RegisterService { } } `; - return this.auth.user$.pipe( - switchMap((response: any) => { - const email = response.email; - console.log(email); - - return this.apollo.mutate({ - mutation: ADD_EMAIL, - variables: { - id: id, - email: email, - }, - }); + this.apollo + .mutate({ + mutation: ADD_EMAIL, + variables: { + id: id, + email: 'yo@billy.com', + }, }) - ); + .subscribe((response) => { + console.log(response); + }); + this.auth.user$ + .pipe( + switchMap((response: any) => { + const email = response.email; + console.log(email); + + return this.apollo.mutate({ + mutation: ADD_EMAIL, + variables: { + id: id, + email: email, + }, + }); + }) + ) + .subscribe((response) => { + console.log(response); + }); } genUser(name: string) { diff --git a/frontend/ruski-app/src/app/modules/home/comment-template.ts b/frontend/ruski-app/src/app/modules/home/comment-template.ts deleted file mode 100644 index e8c74a1..0000000 --- a/frontend/ruski-app/src/app/modules/home/comment-template.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface Comment { - text: string; - user: string[]; - id: number; - likes: number; -} diff --git a/frontend/ruski-app/src/app/modules/home/enter-game/enter-game.component.html b/frontend/ruski-app/src/app/modules/home/enter-game/enter-game.component.html index 7d65376..1102b4f 100644 --- a/frontend/ruski-app/src/app/modules/home/enter-game/enter-game.component.html +++ b/frontend/ruski-app/src/app/modules/home/enter-game/enter-game.component.html @@ -4,7 +4,7 @@
-
+
{{userName}}
diff --git a/frontend/ruski-app/src/app/modules/home/enter-game/enter-game.component.scss b/frontend/ruski-app/src/app/modules/home/enter-game/enter-game.component.scss index 3d7660a..38eee51 100644 --- a/frontend/ruski-app/src/app/modules/home/enter-game/enter-game.component.scss +++ b/frontend/ruski-app/src/app/modules/home/enter-game/enter-game.component.scss @@ -41,7 +41,6 @@ display: flex; flex-direction: row; align-items: center; - cursor: pointer; } #user-details{ display: flex; diff --git a/frontend/ruski-app/src/app/modules/home/enter-game/enter-game.component.ts b/frontend/ruski-app/src/app/modules/home/enter-game/enter-game.component.ts index 9b09ca0..2a9304e 100644 --- a/frontend/ruski-app/src/app/modules/home/enter-game/enter-game.component.ts +++ b/frontend/ruski-app/src/app/modules/home/enter-game/enter-game.component.ts @@ -5,7 +5,6 @@ import { Component, OnInit } from '@angular/core'; import { AbstractControl, FormControl, Validators, FormBuilder,FormGroup } from '@angular/forms'; import { Observable } from 'rxjs'; import { map, startWith } from 'rxjs/operators'; -import { Router } from '@angular/router'; @Component({ selector: 'app-enter-game', @@ -40,7 +39,7 @@ export class EnterGameComponent implements OnInit { userHandle: string = ''; usered: boolean; - constructor(private gameSubmitter: SubmitGameService, private _formBuilder: FormBuilder, private current:CurrentUserService, private router:Router) {} + constructor(private gameSubmitter: SubmitGameService, private _formBuilder: FormBuilder, private current:CurrentUserService) {} ngOnInit(): void { this.gameSubmitter.fetchUsers().valueChanges.subscribe((response) => { @@ -220,7 +219,7 @@ export class EnterGameComponent implements OnInit { fillUser(){ this.current.fetchUser() .subscribe(response => { - const user = response; + const user = response.data.userByEmail[0]; this.userPro= user.profile_url; this.userName= user.name; this.userHandle= user.handle; @@ -228,9 +227,5 @@ export class EnterGameComponent implements OnInit { }); } - - goToProfile(handle: string): void { - this.router.navigate([`/main/user/${handle}`]) - } } diff --git a/frontend/ruski-app/src/app/modules/home/feed/feed.component.html b/frontend/ruski-app/src/app/modules/home/feed/feed.component.html new file mode 100644 index 0000000..acc993b --- /dev/null +++ b/frontend/ruski-app/src/app/modules/home/feed/feed.component.html @@ -0,0 +1 @@ +

feed placeholder

diff --git a/frontend/ruski-app/src/app/modules/home/feed/feed.component.scss b/frontend/ruski-app/src/app/modules/home/feed/feed.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/frontend/ruski-app/src/app/modules/home/search/search.component.spec.ts b/frontend/ruski-app/src/app/modules/home/feed/feed.component.spec.ts similarity index 56% rename from frontend/ruski-app/src/app/modules/home/search/search.component.spec.ts rename to frontend/ruski-app/src/app/modules/home/feed/feed.component.spec.ts index 918ce70..739c936 100644 --- a/frontend/ruski-app/src/app/modules/home/search/search.component.spec.ts +++ b/frontend/ruski-app/src/app/modules/home/feed/feed.component.spec.ts @@ -1,20 +1,20 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { SearchComponent } from './search.component'; +import { FeedComponent } from './feed.component'; -describe('SearchComponent', () => { - let component: SearchComponent; - let fixture: ComponentFixture; +describe('FeedComponent', () => { + let component: FeedComponent; + let fixture: ComponentFixture; beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ SearchComponent ] + declarations: [ FeedComponent ] }) .compileComponents(); }); beforeEach(() => { - fixture = TestBed.createComponent(SearchComponent); + fixture = TestBed.createComponent(FeedComponent); component = fixture.componentInstance; fixture.detectChanges(); }); diff --git a/frontend/ruski-app/src/app/modules/home/feed/feed.component.ts b/frontend/ruski-app/src/app/modules/home/feed/feed.component.ts new file mode 100644 index 0000000..2974b31 --- /dev/null +++ b/frontend/ruski-app/src/app/modules/home/feed/feed.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-feed', + templateUrl: './feed.component.html', + styleUrls: ['./feed.component.scss'] +}) +export class FeedComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/frontend/ruski-app/src/app/modules/home/game-feed-template.ts b/frontend/ruski-app/src/app/modules/home/game-feed-template.ts deleted file mode 100644 index 1bd7dd6..0000000 --- a/frontend/ruski-app/src/app/modules/home/game-feed-template.ts +++ /dev/null @@ -1,23 +0,0 @@ -export interface Game { - w1Name: string; - w1Cups: number; - w1Penalties: number; - w1Image: string; - w2Name: string; - w2Cups: number; - w2Penalties: number; - w2Image: string; - l1Name: string; - l1Cups: number; - l1Penalties: number; - l1Image: string; - l2Name: string; - l2Cups: number; - l2Penalties: number; - l2Image: string; - description: string; - likes: number; - createdAt: string; - id: string; - comments: string[]; -} diff --git a/frontend/ruski-app/src/app/modules/home/home.module.ts b/frontend/ruski-app/src/app/modules/home/home.module.ts index 69d11f0..47b3d05 100644 --- a/frontend/ruski-app/src/app/modules/home/home.module.ts +++ b/frontend/ruski-app/src/app/modules/home/home.module.ts @@ -1,4 +1,3 @@ -import { SpecGameComponent } from './spec-game/spec-game.component'; import { AppRoutingModule } from './../../app-routing.module'; import { MaterialModule } from './../material/material.module'; import { NgModule } from '@angular/core'; @@ -9,17 +8,12 @@ import { EnterGameComponent } from './enter-game/enter-game.component'; import { Routes, RouterModule } from '@angular/router'; import { MainComponent } from 'src/app/main/main.component'; import { AuthGuard } from '@auth0/auth0-angular'; +import { FeedComponent } from './feed/feed.component'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { AuthGuard as RegGuard } from '../auth/auth.guard'; import { MatStepperModule } from '@angular/material/stepper'; import { LeaderboardComponent } from './leaderboard/leaderboard.component'; import { SocialFeedComponent } from './social-feed/social-feed.component'; -import { IndivGameComponent } from './indiv-game/indiv-game.component'; -import { SearchComponent } from './search/search.component'; -import { ProfileComponent } from './profile/profile.component'; -import { SettingsComponent } from './settings/settings.component'; -import { ImageCropperModule } from 'ngx-image-cropper'; -import { HammerModule } from '@angular/platform-browser'; const homeRoutes: Routes = [ { @@ -27,14 +21,10 @@ const homeRoutes: Routes = [ component: MainComponent, canActivate: [AuthGuard, RegGuard], children: [ - { path: '', component: SocialFeedComponent }, + { path: '', component: FeedComponent }, { path: 'enter', component: EnterGameComponent }, { path: 'leaderboard', component: LeaderboardComponent }, - { path: 'search', component: SearchComponent }, { path: 'feed', component: SocialFeedComponent }, - { path: 'feed/:id', component: SpecGameComponent }, - { path: 'user/:handle', component: ProfileComponent }, - { path: 'settings', component: SettingsComponent }, ], }, ]; @@ -44,13 +34,9 @@ const homeRoutes: Routes = [ HomeComponent, NavComponent, EnterGameComponent, + FeedComponent, LeaderboardComponent, SocialFeedComponent, - SpecGameComponent, - IndivGameComponent, - SearchComponent, - ProfileComponent, - SettingsComponent, ], imports: [ CommonModule, @@ -59,8 +45,6 @@ const homeRoutes: Routes = [ ReactiveFormsModule, MatStepperModule, RouterModule.forChild(homeRoutes), - ImageCropperModule, - HammerModule, ], exports: [HomeComponent, NavComponent], }) diff --git a/frontend/ruski-app/src/app/modules/home/indiv-game/indiv-game.component.html b/frontend/ruski-app/src/app/modules/home/indiv-game/indiv-game.component.html deleted file mode 100644 index ddf3464..0000000 --- a/frontend/ruski-app/src/app/modules/home/indiv-game/indiv-game.component.html +++ /dev/null @@ -1,50 +0,0 @@ - -
-
- - - {{ game.w1Name | slice: 0:9 }} & - {{ game.w2Name | slice: 0:9 }} -
-
-
- {{ winning_score }} - - - {{ losing_score }} -
-
-
- {{ game.l1Name | slice: 0:9 }} & - {{ game.l2Name | slice: 0:9 }} - - -
-
-
-

- {{ game.description }} -

-
- {{ !alreadyLiked ? "favorite_border" : "favorite" }} - - {{ - game.comments.length === 0 - ? "chat_bubble_outline" - : "chat_bubble" - }} - {{ game.comments.length }} -
-
- -
diff --git a/frontend/ruski-app/src/app/modules/home/indiv-game/indiv-game.component.scss b/frontend/ruski-app/src/app/modules/home/indiv-game/indiv-game.component.scss deleted file mode 100644 index b0248d6..0000000 --- a/frontend/ruski-app/src/app/modules/home/indiv-game/indiv-game.component.scss +++ /dev/null @@ -1,201 +0,0 @@ -mat-card { - // margin-top: 20px; - // height: 200px; -} - -.mat-card:hover { - cursor: pointer; - background-color: #b4c5b8; -} - -img { - height: 75px; - width: 75px; - border-radius: 50%; - border: 1px solid black; -} - -.w2 { - margin-left: -50px; -} - -.l2 { - margin-left: -50px; - z-index: 1; -} - -.l1 { - z-index: 2; -} - -.winners { - margin-top: 0px; - height: 65px; -} - -.losers { - height: 75px; - text-align: right; - margin-top: -10px; -} - -.flex-container { - display: flex; - flex-direction: column; - margin: 0px; -} - -.names { - display: inline-block; - vertical-align: middle; - margin-left: 60px; - margin-right: 60px; - margin-top: -50px; - font-size: 30px; - font-weight: bold; -} - -.win-score { - color: green; -} - -.lose-score { - color: #b00020; -} - -.win-score, -.lose-score { - font-style: italic; -} - -.score { - display: inline-block; - text-align: center; - height: 75px; -} - -.score-text { - margin-left: auto; - margin-right: auto; - font-size: 70px; - font-weight: bold; -} - -.description { - margin-left: 20%; - margin-right: 20%; - font-size: 20px; -} - -.mat-icon { - font-size: 30px; - padding-left: 25px; - // vertical-align: middle; -} - -.likes, -.comments { - font-size: 25px; - margin-left: 10px; - padding-bottom: 20px; -} - -@media screen and (max-width: 600px) { - .win-score { - margin-right: 50px; - } - - .lose-score { - margin-left: 50px; - } - - img { - height: 35px; - width: 35px; - border-radius: 50%; - border: 1px solid black; - } - - .names { - margin-left: 15px; - margin-right: 15px; - margin-top: -25px; - font-size: 20px; - font-weight: bold; - } - - mat-card { - // height: 175px; - } - - .score { - display: inline-block; - text-align: center; - height: 50px; - margin-top: 10px; - } - - .score-text { - margin-left: auto; - margin-right: auto; - font-size: 40px; - font-weight: bold; - } - - .winners, - .losers { - height: 35px; - } - - .losers { - margin-top: 5px; - } - - .w2 { - margin-left: -15px; - } - - .l2 { - margin-left: -15px; - z-index: 1; - } - - .l1 { - z-index: 2; - } - - .description { - margin-left: 20px; - margin-right: 20px; - font-size: 15px; - } - - .mat-divider { - // margin-left: 60px; - // margin-right: 60px; - } - - .mat-icon { - font-size: 20px; - padding-left: 15px; - vertical-align: middle; - } - - .likes, - .comments { - font-size: 15px; - margin-left: 0px; - } - - // .likes { - // position: absolute; - // margin-top: 5px; - // margin-left: 5px; /* optional */ - // } - - // .likes-relative { - // position: relative; - // top: -5px; - // margin-left: 5px; /* optional */ - // } -} diff --git a/frontend/ruski-app/src/app/modules/home/indiv-game/indiv-game.component.spec.ts b/frontend/ruski-app/src/app/modules/home/indiv-game/indiv-game.component.spec.ts deleted file mode 100644 index 1def04b..0000000 --- a/frontend/ruski-app/src/app/modules/home/indiv-game/indiv-game.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { IndivGameComponent } from './indiv-game.component'; - -describe('IndivGameComponent', () => { - let component: IndivGameComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ IndivGameComponent ] - }) - .compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(IndivGameComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/frontend/ruski-app/src/app/modules/home/indiv-game/indiv-game.component.ts b/frontend/ruski-app/src/app/modules/home/indiv-game/indiv-game.component.ts deleted file mode 100644 index a370523..0000000 --- a/frontend/ruski-app/src/app/modules/home/indiv-game/indiv-game.component.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { FeedService } from './../services/feed.service'; -import { CurrentUserService } from './../services/current-user.service'; -import { Game } from './../game-feed-template'; -import { Component, Input, OnInit, OnChanges } from '@angular/core'; -import { Router } from '@angular/router'; - -@Component({ - selector: 'app-indiv-game', - templateUrl: './indiv-game.component.html', - styleUrls: ['./indiv-game.component.scss'], -}) -export class IndivGameComponent implements OnInit, OnChanges { - @Input() game!: Game; - @Input() userID!: string; - winning_score: number; - losing_score: number; - alreadyLiked = false; - - constructor( - private router: Router, - private hundy: CurrentUserService, - private feedFetcher: FeedService - ) {} - - ngOnInit(): void { - this.winning_score = 10; - console.log(this.game.likes); - this.losing_score = this.game.l1Cups + this.game.l2Cups; - if (this.losing_score > 9) { - this.losing_score = this.getRandomInt(5, 9); - } - this.game.description = - 'Dennis is very cool. Everyone else sucks. Dennis is very cool. Everyone else sucks. Dennis is very cool. Everyone else sucks. Dennis is very cool. Everyone else sucks. Dennis is very cool. Everyone else sucks. Dennis is very cool. Everyone else sucks.'; - this.feedFetcher.getGameLikes(this.game.id).subscribe((response) => { - if (response.includes(this.userID)) { - this.alreadyLiked = true; - // console.log(this.game.id); - } else { - // console.log('nosir'); - this.alreadyLiked = false; - } - if (this.alreadyLiked) { - // console.log(this.game.id); - } - }); - // console.log(this.userID); - } - - ngOnChanges() { - // this.feedFetcher.getGameLikes(this.game.id).subscribe((response) => { - // if (response.includes(this.userID)) { - // // console.log('yessir'); - // this.alreadyLiked = true; - // // console.log(this.game.id); - // // console.log(this.game.likes); - // } else { - // // console.log('nosir'); - // this.alreadyLiked = false; - // } - // if (this.alreadyLiked) { - // // console.log(this.game.id); - // } - // }); - } - - getRandomInt(min: number, max: number) { - min = Math.ceil(min); - max = Math.floor(max); - return Math.floor(Math.random() * (max - min) + min); - } - - navToGame(e: any) { - const srcClasses = e.srcElement.className.split(' '); - if (srcClasses.includes('likeClick')) { - console.log('yo'); - } else { - this.router.navigate(['/main/feed', this.game.id]); - } - // this.router.navigate(['/main/feed', this.game.id]); - } - - changeLikeCount(e: any) { - // console.log('here'); - // console.log(e.srcElement.className); - if (this.alreadyLiked) { - this.feedFetcher.decLike(this.game.id, this.userID); - this.game.likes -= 1; - if (this.game.likes < 0) { - // console.log(this.game.id); - } - this.alreadyLiked = false; - } else { - this.feedFetcher.incLike(this.game.id, this.userID); - this.game.likes += 1; - this.alreadyLiked = true; - } - } -} diff --git a/frontend/ruski-app/src/app/modules/home/leaderboard/leaderboard.component.html b/frontend/ruski-app/src/app/modules/home/leaderboard/leaderboard.component.html index 45210b8..1a6e4e4 100644 --- a/frontend/ruski-app/src/app/modules/home/leaderboard/leaderboard.component.html +++ b/frontend/ruski-app/src/app/modules/home/leaderboard/leaderboard.component.html @@ -16,7 +16,7 @@ User -
+
{{element.name}}
diff --git a/frontend/ruski-app/src/app/modules/home/leaderboard/leaderboard.component.scss b/frontend/ruski-app/src/app/modules/home/leaderboard/leaderboard.component.scss index 61f7d39..de38ed7 100644 --- a/frontend/ruski-app/src/app/modules/home/leaderboard/leaderboard.component.scss +++ b/frontend/ruski-app/src/app/modules/home/leaderboard/leaderboard.component.scss @@ -12,7 +12,6 @@ img { width: 100%; display:flex; flex-direction: row; - cursor: pointer; } #user-handle{ color: mat-color($ruski-theme-accent, A700); diff --git a/frontend/ruski-app/src/app/modules/home/leaderboard/leaderboard.component.ts b/frontend/ruski-app/src/app/modules/home/leaderboard/leaderboard.component.ts index fe26314..9592997 100644 --- a/frontend/ruski-app/src/app/modules/home/leaderboard/leaderboard.component.ts +++ b/frontend/ruski-app/src/app/modules/home/leaderboard/leaderboard.component.ts @@ -1,5 +1,4 @@ import { Component, OnInit, AfterViewInit, ViewChild } from '@angular/core'; -import { Router } from '@angular/router'; import { MatPaginator, PageEvent } from '@angular/material/paginator'; import { MatTableDataSource } from '@angular/material/table'; @@ -16,6 +15,15 @@ export class LeaderboardComponent implements OnInit { // leaderboard data body users? = []; + // current user false header info + loggedInUser = [ + 24, + 'https://d26n5v24zcmg6e.cloudfront.net/profiles/default.jpeg', + 'Steemer', + 1230, + 'stanleysteemer' + ]; + // paginator params length: number; pageSize: number = 15; @@ -40,7 +48,7 @@ export class LeaderboardComponent implements OnInit { dataSource: MatTableDataSource; @ViewChild(MatPaginator) paginator: MatPaginator; - constructor(private leaderboardFetcher: FetchLeaderboardService, private user: CurrentUserService, private router: Router) {} + constructor(private leaderboardFetcher: FetchLeaderboardService, private user: CurrentUserService) {} getLeaderboard(): void { this.leaderboardFetcher.fetchLeaders() @@ -59,7 +67,7 @@ export class LeaderboardComponent implements OnInit { fillUser(): void { this.user.fetchUser() .subscribe(response => { - const user = response; + const user = response.data.userByEmail[0]; this.userPro= user.profile_url; this.userName= user.name; this.userElo= user.elo; @@ -78,9 +86,6 @@ export class LeaderboardComponent implements OnInit { return 0; } - goToProfile(handle: string): void { - this.router.navigate([`/main/user/${handle}`]) - } ngOnInit(): void { this.getLeaderboard(); this.fillUser(); diff --git a/frontend/ruski-app/src/app/modules/home/nav/nav.component.html b/frontend/ruski-app/src/app/modules/home/nav/nav.component.html index 47210a7..8347b9a 100644 --- a/frontend/ruski-app/src/app/modules/home/nav/nav.component.html +++ b/frontend/ruski-app/src/app/modules/home/nav/nav.component.html @@ -1,32 +1,20 @@ -
-
Ruski
-
- - - public - - - - - search - - - - - account_circle - - - - - leaderboard - - - - - create - - +
Ruski
+
+
+ + public + +
+
+ + leaderboard + +
+
+ + create +
diff --git a/frontend/ruski-app/src/app/modules/home/nav/nav.component.scss b/frontend/ruski-app/src/app/modules/home/nav/nav.component.scss index 23bd5ae..5fc31c8 100644 --- a/frontend/ruski-app/src/app/modules/home/nav/nav.component.scss +++ b/frontend/ruski-app/src/app/modules/home/nav/nav.component.scss @@ -1,7 +1,7 @@ mat-toolbar { display: flex; - font-size: 45px; - height: 75px; + font-size: 25px; + height: 7vh; justify-content: space-between; } @@ -9,45 +9,9 @@ mat-icon:hover { cursor: pointer; } -.title:hover { - cursor: pointer; -} - -.flex-container { +.icons { display: flex; - // flex-direction: row; - width: 100%; - height: 75px; + flex-direction: row; + width: 300px; justify-content: space-between; - align-items: center; -} - -span { - margin-right: 60px; -} - -.mat-icon { - font-size: 45px; -} - -@media screen and (max-width: 600px) { - mat-toolbar { - display: flex; - font-size: 25px; - height: 50px; - justify-content: space-between; - } - - .flex-container { - height: 50px; - } - - .mat-icon { - font-size: 25px; - } - - span { - margin-right: 0px; - margin-left: 12px; - } } diff --git a/frontend/ruski-app/src/app/modules/home/nav/nav.component.ts b/frontend/ruski-app/src/app/modules/home/nav/nav.component.ts index 03e0d9f..d570a3c 100644 --- a/frontend/ruski-app/src/app/modules/home/nav/nav.component.ts +++ b/frontend/ruski-app/src/app/modules/home/nav/nav.component.ts @@ -1,15 +1,13 @@ import { Component, OnInit } from '@angular/core'; import { Router } from '@angular/router'; -import { CurrentUserService } from './../services/current-user.service'; - @Component({ selector: 'app-nav', templateUrl: './nav.component.html', styleUrls: ['./nav.component.scss'], }) export class NavComponent implements OnInit { - constructor(private router: Router, private user: CurrentUserService) {} + constructor(private router: Router) {} ngOnInit(): void {} @@ -24,16 +22,4 @@ export class NavComponent implements OnInit { showFeed() { this.router.navigate(['/main/feed']); } - - showSearch() { - this.router.navigate(['/main/search']); - } - - showProfile() { - this.user.getHandle().subscribe((response) => { - console.log(response); - const handle = response; - this.router.navigate([`/main/user/${handle}`]); - }); - } } diff --git a/frontend/ruski-app/src/app/modules/home/profile/profile.component.html b/frontend/ruski-app/src/app/modules/home/profile/profile.component.html deleted file mode 100644 index 7334844..0000000 --- a/frontend/ruski-app/src/app/modules/home/profile/profile.component.html +++ /dev/null @@ -1,10 +0,0 @@ - \ No newline at end of file diff --git a/frontend/ruski-app/src/app/modules/home/profile/profile.component.scss b/frontend/ruski-app/src/app/modules/home/profile/profile.component.scss deleted file mode 100644 index 5015c2e..0000000 --- a/frontend/ruski-app/src/app/modules/home/profile/profile.component.scss +++ /dev/null @@ -1,41 +0,0 @@ -@import "~@angular/material/theming"; -@import '/src/ruski-theme.scss'; - -#header { - width: 100%; - height: 15%; - display:flex; - flex-direction: row; - align-items: center; - background-color: mat-color($ruski-theme-accent, A100); -} - -#header img { - border-radius: 50%; - margin: 0.75em; - height: 50%; - width: auto; -} - -#user-details { - margin: 0.75em; -} - -#header button { - margin: 0.75em; -} -#name { - font-size: 2em; -} -#handle { - color: mat-color($ruski-theme-accent, A700); -} - -@media screen and (max-width: 600px){ - #header { - font-size: 1.5em; - } - #user-details { - margin: 0; - } -} \ No newline at end of file diff --git a/frontend/ruski-app/src/app/modules/home/profile/profile.component.spec.ts b/frontend/ruski-app/src/app/modules/home/profile/profile.component.spec.ts deleted file mode 100644 index e88012e..0000000 --- a/frontend/ruski-app/src/app/modules/home/profile/profile.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { ProfileComponent } from './profile.component'; - -describe('ProfileComponent', () => { - let component: ProfileComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ ProfileComponent ] - }) - .compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(ProfileComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/frontend/ruski-app/src/app/modules/home/profile/profile.component.ts b/frontend/ruski-app/src/app/modules/home/profile/profile.component.ts deleted file mode 100644 index 7cd15bc..0000000 --- a/frontend/ruski-app/src/app/modules/home/profile/profile.component.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import { Router } from '@angular/router'; - -import { ProfileService } from './../services/profile.service'; -import { CurrentUserService } from './../services/current-user.service'; - -import { forkJoin, combineLatest, from } from 'rxjs'; -import { map } from 'rxjs/operators'; - - -@Component({ - selector: 'app-profile', - templateUrl: './profile.component.html', - styleUrls: ['./profile.component.scss'] -}) -export class ProfileComponent implements OnInit { - - // current page member data - id: string; - handle: string; - elo: number; - name: string; - profile_url: string; - - // user data - myHandle:string; - - // gating properties - myProfile: boolean; - isFriend: boolean; - - constructor(private route:ActivatedRoute, private router: Router, private profile:ProfileService, private user:CurrentUserService) { - } - - ngOnInit(): void { - this.determineHandle(); - } - - determineHandle() { - combineLatest([ - this.route.params, - this.user.getHandle() - ]).subscribe(response => { - this.handle = response[0].handle; - this.myHandle = response[1]; - this.getInfo(); - if(this.handle !== this.myHandle){ - this.myProfile = false; - // this.areFriends(this.id, this.myHandle); - } else { - this.myProfile = true; - } - }); - } - - getInfo(): void{ - this.profile.getUserByHandle(this.handle).subscribe(response => { - this.elo = response.elo; - this.name = response.name; - this.profile_url = response.profile_url; - }); - } - - areFriends(pageId: string, myHandle: string): void { - this.profile.checkFriends(pageId, myHandle).subscribe(response => { - this.isFriend = response; - }); - } - - editProfile(): void{ - this.router.navigate(['/main/settings']); - } - - addFriend(): void { - - this.areFriends(this.id, this.myHandle); - } - - removeFriend(): void { - - this.areFriends(this.id, this.myHandle); - } - -} diff --git a/frontend/ruski-app/src/app/modules/home/search/search.component.html b/frontend/ruski-app/src/app/modules/home/search/search.component.html deleted file mode 100644 index 05bc648..0000000 --- a/frontend/ruski-app/src/app/modules/home/search/search.component.html +++ /dev/null @@ -1,54 +0,0 @@ -
- - Name or handle: - - - -
-
- -
-
- - {{ name.split(" ").slice(0, -1).join(" ") }} - {{ - name.split(" ")[name.split(" ").length - 1] - }} -
- - {{ - nameEloMap.get( - name.split(" ").slice(0, -1).join(" ") - ) - }} - -
-
-
-
- No users found. -
-
-
diff --git a/frontend/ruski-app/src/app/modules/home/search/search.component.scss b/frontend/ruski-app/src/app/modules/home/search/search.component.scss deleted file mode 100644 index af54001..0000000 --- a/frontend/ruski-app/src/app/modules/home/search/search.component.scss +++ /dev/null @@ -1,91 +0,0 @@ -.form { - margin-left: 30%; - margin-right: 30%; -} - -img { - height: 75px; - width: 75px; - border-radius: 50%; - border: 1px solid black; -} - -.name { - display: inline-block; - vertical-align: middle; - font-size: 30px; - margin-top: -60px; - margin-left: 40px; -} - -.elo { - display: inline-block; - vertical-align: middle; - font-size: 30px; - margin-left: 40px; - margin-top: 25px; - color: #2b5c36; - font-weight: bold; -} - -input { - width: 100%; -} - -.mat-form-field { - width: 100%; -} - -.flex-container { - display: flex; - justify-content: space-between; -} - -.dom { - // margin-top: 100px; -} - -.mat-card:hover { - cursor: pointer; - background-color: #b4c5b8; -} - -@media screen and (max-width: 600px) { - .form { - margin-left: 20px; - margin-right: 20px; - } - - .mat-form-field { - width: 300px; - } - - input { - width: 300px; - } - - img { - height: 35px; - width: 35px; - border-radius: 50%; - border: 1px solid black; - } - - .name { - display: inline-block; - vertical-align: middle; - font-size: 15px; - margin-top: -20px; - margin-left: 20px; - } - - .elo { - display: inline-block; - vertical-align: middle; - font-size: 15px; - margin-left: 20px; - margin-top: 25px; - color: #2b5c36; - font-weight: bold; - } -} diff --git a/frontend/ruski-app/src/app/modules/home/search/search.component.ts b/frontend/ruski-app/src/app/modules/home/search/search.component.ts deleted file mode 100644 index a2d1d69..0000000 --- a/frontend/ruski-app/src/app/modules/home/search/search.component.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { SearchFetcherService } from './../services/search-fetcher.service'; -import { Component, OnInit } from '@angular/core'; -import { FormControl } from '@angular/forms'; -import { Observable } from 'rxjs'; -import { map, startWith } from 'rxjs/operators'; - -@Component({ - selector: 'app-search', - templateUrl: './search.component.html', - styleUrls: ['./search.component.scss'], -}) -export class SearchComponent implements OnInit { - constructor(private searchFetcher: SearchFetcherService) {} - searchControl = new FormControl(); - namesOptions = []; - handleOptions = []; - handleToName = new Map(); - nameToHandle = new Map(); - nameUrlMap = new Map(); - nameEloMap = new Map(); - filteredOptions: Observable; - - ngOnInit(): void { - this.searchFetcher.fetchAllUsersAndHandles().subscribe((response) => { - // console.log(response); - for (const user of response) { - this.namesOptions.push(user.name); - this.handleOptions.push(user.handle); - this.handleToName.set(user.handle, user.name); - this.nameToHandle.set(user.name, user.handle); - this.nameUrlMap.set(user.name, user.profile_url); - this.nameEloMap.set(user.name, user.elo); - } - // console.log(this.nameUrlMap.get('Abby')); - }); - this.filteredOptions = this.searchControl.valueChanges.pipe( - startWith(''), - map((value) => this._filter(value)) - ); - } - - private _filter(value: string): string[] { - const filterValue = value.toLowerCase(); - - // console.log(this.handleToName); - - let returnName = this.namesOptions - .filter((option) => option.toLowerCase().indexOf(filterValue) === 0) - .map((name) => { - return `${name} @${this.nameToHandle.get(name)}`; - }); - - let returnHandle = this.handleOptions - .filter((option) => option.toLowerCase().indexOf(filterValue) === 0) - .map((handle) => { - return `${this.handleToName.get(handle)} @${handle}`; - }); - - let returnValues = [...new Set(returnName.concat(returnHandle))]; - returnValues.sort(); - returnValues = returnValues.slice(0, 5); - - return returnValues; - } -} diff --git a/frontend/ruski-app/src/app/modules/home/services/comment.service.spec.ts b/frontend/ruski-app/src/app/modules/home/services/comment.service.spec.ts deleted file mode 100644 index 51975fd..0000000 --- a/frontend/ruski-app/src/app/modules/home/services/comment.service.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { CommentService } from './comment.service'; - -describe('CommentService', () => { - let service: CommentService; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(CommentService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/frontend/ruski-app/src/app/modules/home/services/comment.service.ts b/frontend/ruski-app/src/app/modules/home/services/comment.service.ts deleted file mode 100644 index d0700b4..0000000 --- a/frontend/ruski-app/src/app/modules/home/services/comment.service.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { switchMap } from 'rxjs/operators'; -import { Injectable } from '@angular/core'; -import { Apollo, gql } from 'apollo-angular'; -import { of } from 'rxjs'; - -@Injectable({ - providedIn: 'root', -}) -export class CommentService { - constructor(private apollo: Apollo) {} - - addComment(userId: string, text: string, game_id: string) { - const ADD_COMMENT = gql` - mutation AddComment($text: String!, $user_id: ID!) { - addComment(text: $text, user_id: $user_id) { - id - } - } - `; - const ADD_COMMENT_TO_GAME = gql` - mutation AddCommentToGame($id: ID!, $comment_id: ID!) { - addCommentToGame(id: $id, comment_id: $comment_id) { - id - } - } - `; - console.log('here'); - this.apollo - .mutate({ - mutation: ADD_COMMENT, - variables: { - text: text, - user_id: userId, - }, - }) - .pipe( - switchMap((response: any) => { - console.log(response.data.addComment.id); - return this.apollo.mutate({ - mutation: ADD_COMMENT_TO_GAME, - variables: { - id: game_id, - comment_id: response.data.addComment.id, - }, - }); - }) - ) - .subscribe((response) => { - console.log(response); - }); - } -} diff --git a/frontend/ruski-app/src/app/modules/home/services/current-user.service.ts b/frontend/ruski-app/src/app/modules/home/services/current-user.service.ts index 39d9055..44fb45d 100644 --- a/frontend/ruski-app/src/app/modules/home/services/current-user.service.ts +++ b/frontend/ruski-app/src/app/modules/home/services/current-user.service.ts @@ -8,39 +8,8 @@ import { catchError, map, tap, switchMap } from 'rxjs/operators'; providedIn: 'root', }) export class CurrentUserService { - userId = ''; - constructor(private auth: AuthService, private apollo: Apollo) {} - getUserID() { - const GET_USER = gql` - query UserByEmail($email: String!) { - userByEmail(email: $email) { - id - } - } - `; - return this.auth.user$.pipe( - switchMap((response: any) => { - const email = response.email; - - return this.apollo - .query({ - query: GET_USER, - variables: { - email: email, - }, - fetchPolicy: 'no-cache', - }) - .pipe( - map((response) => { - return response.data.userByEmail[0].id; - }) - ); - }) - ); - } - fetchUser() { return this.auth.user$.pipe( switchMap((response) => { @@ -59,54 +28,26 @@ export class CurrentUserService { return this.apollo .query({ query: GET_USER, - fetchPolicy: 'no-cache', - }) - .pipe( - map((response) => { - if (!response.data.userByEmail.length) { - return { - profile_url: - 'https://d26n5v24zcmg6e.cloudfront.net/profiles/default.jpeg', - name: 'YourName', - elo: 1200, - handle: 'yourhandle', - id: 'abcdefghijklmnop', - }; - } else { - return response.data.userByEmail[0]; - } - }) - ); - }) - ); - } - - getHandle() { - return this.auth.user$.pipe( - switchMap((response) => { - // query to get logged in user - console.log(response.email); - const GET_USER = gql` - query GetUser { - userByEmail(email: "${response.email}") { - handle - } - } - `; - return this.apollo - .query({ - query: GET_USER, - fetchPolicy: 'no-cache', }) .pipe( map((response) => { - console.log(response); if (!response.data.userByEmail.length) { return { - handle: 'yourhandle', + data: { + userByEmail: [ + { + profile_url: + 'https://d26n5v24zcmg6e.cloudfront.net/profiles/default.jpeg', + name: 'YourName', + elo: 1200, + handle: 'yourhandle', + id: 'abcdefghijklmnop', + }, + ], + }, }; } else { - return response.data.userByEmail[0].handle; + return response; } }) ); diff --git a/frontend/ruski-app/src/app/modules/home/services/feed.service.spec.ts b/frontend/ruski-app/src/app/modules/home/services/feed.service.spec.ts deleted file mode 100644 index 656b960..0000000 --- a/frontend/ruski-app/src/app/modules/home/services/feed.service.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { FeedService } from './feed.service'; - -describe('FeedService', () => { - let service: FeedService; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(FeedService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/frontend/ruski-app/src/app/modules/home/services/feed.service.ts b/frontend/ruski-app/src/app/modules/home/services/feed.service.ts deleted file mode 100644 index f39929f..0000000 --- a/frontend/ruski-app/src/app/modules/home/services/feed.service.ts +++ /dev/null @@ -1,316 +0,0 @@ -import { Game } from './../game-feed-template'; -import { Injectable } from '@angular/core'; -import { Apollo, gql } from 'apollo-angular'; -import { map, switchMap } from 'rxjs/operators'; -import { AuthService } from '@auth0/auth0-angular'; -import { of } from 'rxjs'; - -@Injectable({ - providedIn: 'root', -}) -export class FeedService { - constructor(private apollo: Apollo, public auth: AuthService) {} - - fetchGlobal() {} - - fetchSpecGame(id: string) { - // console.log('here'); - // console.log(id); - const GET_GAME = gql` - query GetGameByID($id: ID!) { - game(id: $id) { - likes - createdAt - comments { - text - user { - name - profile_url - } - id - likes - } - winning_team { - user { - name - profile_url - } - cups - penalties - } - losing_team { - user { - name - profile_url - } - cups - penalties - } - description - id - } - } - `; - - return this.apollo - .query({ - query: GET_GAME, - variables: { - id: id, - }, - fetchPolicy: 'no-cache', - }) - .pipe( - map((response) => { - // console.log(response); - const gamesList = []; - const game = response.data.game; - const tempGame = { - w1Name: game.winning_team[0].user.name, - w1Cups: game.winning_team[0].cups, - w1Penalties: game.winning_team[0].penalties, - w1Image: game.winning_team[0].user.profile_url, - w2Name: game.winning_team[1].user.name, - w2Cups: game.winning_team[1].cups, - w2Penalties: game.winning_team[1].penalties, - w2Image: game.winning_team[1].user.profile_url, - l1Name: game.losing_team[0].user.name, - l1Cups: game.losing_team[0].cups, - l1Penalties: game.losing_team[0].penalties, - l1Image: game.losing_team[0].user.profile_url, - l2Name: game.losing_team[1].user.name, - l2Cups: game.losing_team[1].cups, - l2Penalties: game.losing_team[1].penalties, - l2Image: game.losing_team[1].user.profile_url, - description: game.description, - likes: game.likes, - createdAt: game.createdAt, - id: game.id, - comments: game.comments, - }; - return tempGame; - }) - ); - } - - fetchAllGames() { - const GET_GAMES = gql` - query GetGames { - games { - likes - createdAt - comments { - text - } - winning_team { - user { - name - profile_url - } - cups - penalties - } - losing_team { - user { - name - profile_url - } - cups - penalties - } - description - id - } - } - `; - - return this.apollo - .query({ - query: GET_GAMES, - fetchPolicy: 'no-cache', - }) - .pipe( - map((response) => { - // console.log(response); - const gamesList = []; - for (const game of response.data.games) { - const tempGame = { - w1Name: game.winning_team[0].user.name, - w1Cups: game.winning_team[0].cups, - w1Penalties: game.winning_team[0].penalties, - w1Image: game.winning_team[0].user.profile_url, - w2Name: game.winning_team[1].user.name, - w2Cups: game.winning_team[1].cups, - w2Penalties: game.winning_team[1].penalties, - w2Image: game.winning_team[1].user.profile_url, - l1Name: game.losing_team[0].user.name, - l1Cups: game.losing_team[0].cups, - l1Penalties: game.losing_team[0].penalties, - l1Image: game.losing_team[0].user.profile_url, - l2Name: game.losing_team[1].user.name, - l2Cups: game.losing_team[1].cups, - l2Penalties: game.losing_team[1].penalties, - l2Image: game.losing_team[1].user.profile_url, - description: game.description, - likes: game.likes, - createdAt: game.createdAt, - id: game.id, - comments: game.comments, - }; - gamesList.push(tempGame); - } - return gamesList; - }) - ); - } - - incLike(gameId: string, userId: string) { - // console.log(gameId, userId); - const INC_LIKE = gql` - mutation IncrementGameLike($id: ID!, $liked_by_id: ID!) { - incrementGameLike(id: $id, liked_by_id: $liked_by_id) { - id - } - } - `; - - this.auth.user$ - .pipe( - switchMap((response: any) => { - const email = response.email; - - return this.apollo.mutate({ - mutation: INC_LIKE, - variables: { - id: gameId, - liked_by_id: userId, - }, - }); - }) - ) - .subscribe((response) => { - // console.log(response); - }); - } - - decLike(gameId: string, userId: string) { - // console.log(gameId, userId); - const DEC_LIKE = gql` - mutation DecrementGameLike($id: ID!, $liked_by_id: ID!) { - decrementGameLike(id: $id, liked_by_id: $liked_by_id) { - id - } - } - `; - - this.auth.user$ - .pipe( - switchMap((response: any) => { - const email = response.email; - - return this.apollo.mutate({ - mutation: DEC_LIKE, - variables: { - id: gameId, - liked_by_id: userId, - }, - }); - }) - ) - .subscribe((response) => { - // console.log(response); - }); - } - - getGameLikes(id: string) { - // return of(['Billy', '606d262479a35ad0d582ec9c']); - // console.log(id); - const GET_GAME = gql` - query GetGameLikes($id: ID!) { - game(id: $id) { - liked_by { - id - } - likes - } - } - `; - - return this.apollo - .query({ - query: GET_GAME, - variables: { - id: id, - }, - fetchPolicy: 'no-cache', - }) - .pipe( - map((response) => { - const liked_by = []; - // console.log(response.data.game.liked_by); - for (const user of response.data.game.liked_by) { - liked_by.push(user.id); - } - return liked_by; - }) - ); - } - - incCommentLike(commentId: string, userId: string) { - // console.log(gameId, userId); - const INC_LIKE = gql` - mutation IncrementCommentLike($id: ID!, $liked_by_id: ID!) { - incrementCommentLike(id: $id, liked_by_id: $liked_by_id) { - id - } - } - `; - - this.auth.user$ - .pipe( - switchMap((response: any) => { - const email = response.email; - - return this.apollo.mutate({ - mutation: INC_LIKE, - variables: { - id: commentId, - liked_by_id: userId, - }, - }); - }) - ) - .subscribe((response) => { - // console.log(response); - }); - } - - decCommentLike(commentId: string, userId: string) { - // console.log(gameId, userId); - const DEC_LIKE = gql` - mutation DecrementCommentLike($id: ID!, $liked_by_id: ID!) { - decrementCommentLike(id: $id, liked_by_id: $liked_by_id) { - id - } - } - `; - - this.auth.user$ - .pipe( - switchMap((response: any) => { - const email = response.email; - - return this.apollo.mutate({ - mutation: DEC_LIKE, - variables: { - id: commentId, - liked_by_id: userId, - }, - }); - }) - ) - .subscribe((response) => { - // console.log(response); - }); - } -} diff --git a/frontend/ruski-app/src/app/modules/home/services/profile.service.spec.ts b/frontend/ruski-app/src/app/modules/home/services/profile.service.spec.ts deleted file mode 100644 index 2ddf7f2..0000000 --- a/frontend/ruski-app/src/app/modules/home/services/profile.service.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { ProfileService } from './profile.service'; - -describe('ProfileService', () => { - let service: ProfileService; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(ProfileService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/frontend/ruski-app/src/app/modules/home/services/profile.service.ts b/frontend/ruski-app/src/app/modules/home/services/profile.service.ts deleted file mode 100644 index 96ce204..0000000 --- a/frontend/ruski-app/src/app/modules/home/services/profile.service.ts +++ /dev/null @@ -1,148 +0,0 @@ -import { Injectable, Type } from '@angular/core'; -import { Apollo, gql } from 'apollo-angular'; -import { HttpClient } from '@angular/common/http'; -import { of } from 'rxjs'; -import { catchError, map, tap, switchMap } from 'rxjs/operators'; - -@Injectable({ - providedIn: 'root', -}) -export class ProfileService { - constructor(private apollo: Apollo, private http: HttpClient) {} - - getUserByHandle(handle: string) { - // query to get logged in user - const GET_USER = gql` - query GetUser { - userByHandle(handle: "${handle}") { - id - name - handle - profile_url - elo - } - } - `; - return this.apollo - .query({ - query: GET_USER, - fetchPolicy: 'no-cache', - }) - .pipe( - map((response) => { - if (!response.data.userByHandle.length) { - return { - profile_url: - 'https://d26n5v24zcmg6e.cloudfront.net/profiles/default.jpeg', - name: 'YourName', - elo: 1200, - handle: 'yourhandle', - id: 'abcdefghijklmnop', - }; - } else { - return response.data.userByHandle[0]; - } - }) - ); - } - - checkFriends(prospectiveId: string, baseHandle: string) { - const FIND_FRIEND_HANDLES = gql` - query GetUser { - userByHandle(handle: "${baseHandle}") { - id - friends { - handle - } - } - } - `; - - return this.apollo - .query({ - query: FIND_FRIEND_HANDLES, - }) - .pipe( - map((response) => { - if (!response.data.userByHandle.length) { - return false; - } else { - let friends_list = - response.data.userByHandle[0].friends; - return friends_list.includes(prospectiveId); - } - }) - ); - } - - updateHandle(id: string, newHandle: string) { - const UPDATE_HANDLE = gql` - mutation ModifyHandle($id: ID!, $handle: String!) { - modifyHandle(id: $id, handle: $handle) { - id - } - } - `; - return this.apollo.mutate({ - mutation: UPDATE_HANDLE, - variables: { - id: id, - handle: newHandle, - }, - }); - } - - updateName(id: string, newName: string) { - const UPDATE_NAME = gql` - mutation ModifyName($id: ID!, $name: String!) { - modifyName(id: $id, name: $name) { - id - } - } - `; - return this.apollo.mutate({ - mutation: UPDATE_NAME, - variables: { - id: id, - name: newName, - }, - }); - } - - updatePic(id: string, picture: string) { - const typeRegex = /data\:image\/(png|jpeg)/; - const type = typeRegex.exec(picture)[1]; - return this.http - .get(`http://localhost:4000/get_presigned_url_${type}/${id}`) - .pipe( - switchMap((response: any) => { - console.log(response); - // const data = response.json(); - const signedUrl = response.presigned_url; - console.log(signedUrl); - return this.http - .request('POST', signedUrl, { - headers: { - 'Content-Type': `image/${type}`, - mode: 'cors', - }, - body: picture, - }) - .pipe( - map((response) => { - console.log(response); - return response; - }) - ); - }) - ); - } - - // signedUrl, - // picture, - // { - // headers: { - // 'Content-Type': `image/${type}`, - // } - // }, -} diff --git a/frontend/ruski-app/src/app/modules/home/services/search-fetcher.service.spec.ts b/frontend/ruski-app/src/app/modules/home/services/search-fetcher.service.spec.ts deleted file mode 100644 index 998312b..0000000 --- a/frontend/ruski-app/src/app/modules/home/services/search-fetcher.service.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { SearchFetcherService } from './search-fetcher.service'; - -describe('SearchFetcherService', () => { - let service: SearchFetcherService; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(SearchFetcherService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/frontend/ruski-app/src/app/modules/home/services/search-fetcher.service.ts b/frontend/ruski-app/src/app/modules/home/services/search-fetcher.service.ts deleted file mode 100644 index 9c83f1f..0000000 --- a/frontend/ruski-app/src/app/modules/home/services/search-fetcher.service.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Apollo, gql } from 'apollo-angular'; -import { of } from 'rxjs'; -import { filter, map, switchMap } from 'rxjs/operators'; - -@Injectable({ - providedIn: 'root', -}) -export class SearchFetcherService { - constructor(private apollo: Apollo) {} - - fetchAllUsersAndHandles() { - // console.log('here'); - return this.apollo - .watchQuery({ - query: gql` - { - users { - id - name - handle - profile_url - elo - } - } - `, - fetchPolicy: 'no-cache', - }) - .valueChanges.pipe( - map((data) => { - return data.data.users; - }) - ); - } -} diff --git a/frontend/ruski-app/src/app/modules/home/services/submit-game.service.ts b/frontend/ruski-app/src/app/modules/home/services/submit-game.service.ts index bd1d5e2..cbfb8b2 100644 --- a/frontend/ruski-app/src/app/modules/home/services/submit-game.service.ts +++ b/frontend/ruski-app/src/app/modules/home/services/submit-game.service.ts @@ -136,7 +136,6 @@ export class SubmitGameService { } } `, - fetchPolicy: 'no-cache', }); } } diff --git a/frontend/ruski-app/src/app/modules/home/settings/settings.component.html b/frontend/ruski-app/src/app/modules/home/settings/settings.component.html deleted file mode 100644 index f6f0a2e..0000000 --- a/frontend/ruski-app/src/app/modules/home/settings/settings.component.html +++ /dev/null @@ -1,49 +0,0 @@ - -
-
-
- - - -
-
- -
-
- - New Name: - - - - New Handle: - @   - - -
-
-
-

{{ errorMessage }}

-
-
- -
-
\ No newline at end of file diff --git a/frontend/ruski-app/src/app/modules/home/settings/settings.component.scss b/frontend/ruski-app/src/app/modules/home/settings/settings.component.scss deleted file mode 100644 index b5e42c8..0000000 --- a/frontend/ruski-app/src/app/modules/home/settings/settings.component.scss +++ /dev/null @@ -1,119 +0,0 @@ -@import "~@angular/material/theming"; -@import '/src/ruski-theme.scss'; - -#header { - width: 100%; - font-size: 2em; - margin: 0 0 0.5em 0; - text-align: center; - background-color: mat-color($ruski-theme-accent, A100); -} - -#header div { - padding: 0.5em 0 0.5em; -} - -.flex-container { - width: 65%; - height: 80%; - margin: 0 auto; - display: flex; - flex-direction: column; - align-items: center; - justify-content: flex-start; -} -.form-elements { - margin-bottom: 1em; - width: 100%; - height: 75%; - display:flex; - flex-direction: column; - justify-content: flex-start; - align-items: center; -} - -#profile { - height: 50%; - display: flex; - align-items: center; -} - -#profile #pro-pic { - border-radius: 50%; - height: 35%; - width: auto; - margin: 0 0.5em 0 0.5em; - object-fit: cover; -} - -#profile button { - margin: 0 0.5em 0 0.5em; -} - -#cropper { - max-height: 45%; - max-width: 25%; -} -#cropper image-cropper { - max-height: 100%; - max-width: 100%; -} - -#user-details { - display: flex; - flex-direction: row; - justify-content: space-around; -} - -mat-form-field { - padding: 0 10% 0 10%; -} - -@media screen and (max-width: 600px){ - .flex-container { - justify-content: flex-start; - } - - .form-elements { - flex-direction: column; - align-items: flex-start; - justify-content: flex-start; - height: auto; - } - .form-elements div { - margin-top: 0.5em; - margin-bottom: 0.5em; - } - - mat-form-field { - padding: 0; - } - - #profile { - height: auto; - } - - .flex-container { - width: 80%; - height: 65%; - } - - #profile #pro-pic { - border-radius: 50%; - width: 15%; - height: auto; - margin: 0 0.5em 0 0.5em; - } - - #cropper { - height: 100%; - width: 50%; - } - - #user-details { - display: flex; - flex-direction: column; - justify-content: space-around; - } - -} \ No newline at end of file diff --git a/frontend/ruski-app/src/app/modules/home/settings/settings.component.spec.ts b/frontend/ruski-app/src/app/modules/home/settings/settings.component.spec.ts deleted file mode 100644 index a3a508b..0000000 --- a/frontend/ruski-app/src/app/modules/home/settings/settings.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { SettingsComponent } from './settings.component'; - -describe('SettingsComponent', () => { - let component: SettingsComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ SettingsComponent ] - }) - .compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(SettingsComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/frontend/ruski-app/src/app/modules/home/settings/settings.component.ts b/frontend/ruski-app/src/app/modules/home/settings/settings.component.ts deleted file mode 100644 index 76438ac..0000000 --- a/frontend/ruski-app/src/app/modules/home/settings/settings.component.ts +++ /dev/null @@ -1,132 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { AbstractControl, FormControl, Validators, FormBuilder,FormGroup, Form } from '@angular/forms'; -import { ImageCroppedEvent } from 'ngx-image-cropper'; -import { Router } from '@angular/router'; - -import { CurrentUserService } from './../services/current-user.service'; -import { ProfileService } from './../services/profile.service'; -import { combineLatest } from 'rxjs'; - -@Component({ - selector: 'app-settings', - templateUrl: './settings.component.html', - styleUrls: ['./settings.component.scss'] -}) -export class SettingsComponent implements OnInit { - - // form properties - nameControl = new FormControl(null, {validators: [Validators.maxLength(20)]}); - handleControl = new FormControl(null, {validators: [Validators.maxLength(20)]}); - imageControl = new FormControl(null); - - formGroup = this._formBuilder.group({}); - - // values for html - name:string; - handle:string; - pic:string; - - // values for comparison - oldName:string; - oldHandle:string; - oldPic: string; - - // identify user - id:string; - - // cropper properties - imageChangedEvent; - croppedImage; - - // error properties - errorFlag: boolean; - errorMessage: string; - - constructor(private currentUser: CurrentUserService, private _formBuilder: FormBuilder, private router: Router, private profile:ProfileService) { } - - ngOnInit(): void { - this.compareHandles(); - this.formGroup = this._formBuilder.group({ - name: this.nameControl, - handle: this.handleControl, - image: this.imageControl, - }) - } - - compareHandles(): void { - this.currentUser.fetchUser().subscribe(response => { - this.oldHandle = response.handle; - this.oldName = response.name; - this.oldPic = response.profile_url; - this.id = response.id; - - this.name = this.oldName; - this.handle = this.oldHandle; - this.pic = this.oldPic; - }); - } - - submitChanges(): void { - const handle = this.handleControl.value; - const name = this.nameControl.value; - const pic = this.imageControl.value; - - if(name && name.length > 20) { - this.errorFlag = true; - this.errorMessage = 'Error: Name must be less than 20 characters.'; - return; - } - if(handle && handle.length > 20) { - this.errorFlag = true; - this.errorMessage = 'Error: Handle must be less than 20 characters.'; - return; - } - this.errorFlag = false; - - let observables = []; - if(handle && handle !== this.oldHandle){ - this.handle = handle; - observables.push(this.profile.updateHandle(this.id, this.handle)); - } - if(name && name !== this.oldName){ - this.name = name; - observables.push(this.profile.updateName(this.id, this.name)); - } - if(pic){ - observables.push(this.profile.updatePic(this.id, pic)); - } - - if(!observables.length){ - this.router.navigate([`/main/user/${this.handle}`]); - } - - combineLatest(observables).subscribe(response => { - console.log(response); - this.router.navigate([`/main/user/${this.handle}`]); - }); - - - } - - onSelect(event: Event) { - const file = (event.target as HTMLInputElement).files[0]; - this.formGroup.patchValue({image: file}); - this.formGroup.get('image').updateValueAndValidity(); - const reader = new FileReader(); - reader.readAsDataURL(file); - this.imageChangedEvent = event; - } - - imageCropped(event: ImageCroppedEvent) { - this.croppedImage = event.base64; - this.pic = this.croppedImage; - this.formGroup.patchValue({image: this.croppedImage}); - } - imageLoaded(image: HTMLImageElement) { - // show cropper - } - cropperReady() { - // cropper ready - } - -} diff --git a/frontend/ruski-app/src/app/modules/home/social-feed/social-feed.component.html b/frontend/ruski-app/src/app/modules/home/social-feed/social-feed.component.html index c78a9f3..9648626 100644 --- a/frontend/ruski-app/src/app/modules/home/social-feed/social-feed.component.html +++ b/frontend/ruski-app/src/app/modules/home/social-feed/social-feed.component.html @@ -1,5 +1 @@ - -
- -
-
+

social-feed works!

diff --git a/frontend/ruski-app/src/app/modules/home/social-feed/social-feed.component.scss b/frontend/ruski-app/src/app/modules/home/social-feed/social-feed.component.scss index 8b3ae85..e69de29 100644 --- a/frontend/ruski-app/src/app/modules/home/social-feed/social-feed.component.scss +++ b/frontend/ruski-app/src/app/modules/home/social-feed/social-feed.component.scss @@ -1,4 +0,0 @@ -.viewport { - height: 100%; - width: 100%; -} diff --git a/frontend/ruski-app/src/app/modules/home/social-feed/social-feed.component.ts b/frontend/ruski-app/src/app/modules/home/social-feed/social-feed.component.ts index 9f100d0..396b44c 100644 --- a/frontend/ruski-app/src/app/modules/home/social-feed/social-feed.component.ts +++ b/frontend/ruski-app/src/app/modules/home/social-feed/social-feed.component.ts @@ -1,29 +1,15 @@ -import { FeedService } from './../services/feed.service'; import { Component, OnInit } from '@angular/core'; -import { Game } from '../game-feed-template'; -import { CurrentUserService } from '../services/current-user.service'; @Component({ - selector: 'app-social-feed', - templateUrl: './social-feed.component.html', - styleUrls: ['./social-feed.component.scss'], + selector: 'app-social-feed', + templateUrl: './social-feed.component.html', + styleUrls: ['./social-feed.component.scss'] }) export class SocialFeedComponent implements OnInit { - games: Game[] = []; - games2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]; - userID = ''; - constructor( - private feedFetcher: FeedService, - private hundy: CurrentUserService - ) {} + constructor() { } + + ngOnInit(): void { + } - ngOnInit(): void { - this.feedFetcher.fetchAllGames().subscribe((response) => { - this.games = response; - }); - this.hundy.getUserID().subscribe((response) => { - this.userID = response; - }); - } } diff --git a/frontend/ruski-app/src/app/modules/home/spec-game/spec-game.component.html b/frontend/ruski-app/src/app/modules/home/spec-game/spec-game.component.html deleted file mode 100644 index 6c80438..0000000 --- a/frontend/ruski-app/src/app/modules/home/spec-game/spec-game.component.html +++ /dev/null @@ -1,108 +0,0 @@ - - arrow_back_ios -
-
- - - {{ game.w1Name | slice: 0:9 }} & - {{ game.w2Name | slice: 0:9 }} -
-
-
- {{ winning_score }} - - - {{ losing_score }} -
-
-
- {{ game.l1Name | slice: 0:9 }} & - {{ game.l2Name | slice: 0:9 }} - - -
-
-
-

- {{ game.description }} -

-
- {{ !alreadyLiked ? "favorite_border" : "favorite" }} - - {{ - game.comments.length === 0 - ? "chat_bubble_outline" - : "chat_bubble" - }} - {{ game.comments.length }} -
-
-
-
-
- -
-
- - {{ comment.user.name }} - - {{ - !alreadyLikedComment[i] - ? "favorite_border" - : "favorite" - }} - - {{ commentLikeMirror[i] }} -
-
{{ comment.text }}
- -
-
-
-
- Be the first to comment -
-
- - Add Comment - - -
-
- -
-
diff --git a/frontend/ruski-app/src/app/modules/home/spec-game/spec-game.component.scss b/frontend/ruski-app/src/app/modules/home/spec-game/spec-game.component.scss deleted file mode 100644 index e2a80e4..0000000 --- a/frontend/ruski-app/src/app/modules/home/spec-game/spec-game.component.scss +++ /dev/null @@ -1,334 +0,0 @@ -mat-card { - // margin-top: 20px; - // height: 200px; -} - -img { - height: 75px; - width: 75px; - border-radius: 50%; - border: 1px solid black; -} - -.w2 { - margin-left: -50px; -} - -.l2 { - margin-left: -50px; - z-index: 1; -} - -.l1 { - z-index: 2; -} - -.winners { - margin-top: 0px; - height: 65px; -} - -.losers { - height: 75px; - text-align: right; - margin-top: -10px; -} - -.flex-container { - display: flex; - flex-direction: column; - margin: 0px; -} - -.names { - display: inline-block; - vertical-align: middle; - margin-left: 60px; - margin-right: 60px; - margin-top: -50px; - font-size: 30px; - font-weight: bold; -} - -.win-score { - color: green; -} - -.lose-score { - color: #b00020; -} - -.win-score, -.lose-score { - font-style: italic; -} - -.score { - display: inline-block; - text-align: center; - height: 75px; -} - -.score-text { - margin-left: auto; - margin-right: auto; - font-size: 70px; - font-weight: bold; -} - -.description { - margin-left: 20%; - margin-right: 20%; - font-size: 20px; -} - -.mat-icon { - font-size: 30px; - padding-left: 25px; - // vertical-align: middle; -} - -.mat-icon:hover { - cursor: pointer; -} - -.likes, -.comments { - font-size: 25px; - margin-left: 10px; - padding-bottom: 20px; -} - -.commenty { - // margin-left: 350px; - // margin-right: 350px; - margin-left: 30%; - margin-right: 30%; -} - -.mat-form-field { - width: 100%; -} - -textarea { - height: 75px; -} - -.viewport { - height: 800px; - width: 100%; - margin-top: 20px; -} - -.first { - margin-top: 20px; -} - -.comment-image { - height: 25px; - width: 25px; - border-radius: 50%; - border: 1px solid black; -} - -.comment-name { - display: inline-block; - margin-top: -16px; - font-weight: bold; - vertical-align: middle; -} - -.comment-text, -.comment-name { - // display: inline-block; - // margin-top: 5px; - margin-left: 5px; -} - -.comment-text { - // overflow: hidden; - // display: block; -} - -.comment-container { - display: flex; - flex-direction: column; - margin-top: 10px; -} - -.comment-likes { - display: inline-block; - vertical-align: middle; - margin-top: -15px; - margin-left: 100px; -} - -.comment-like-count { - margin-top: -10px; - margin-left: 15px; - display: inline-block; - vertical-align: middle; -} - -@media screen and (max-width: 600px) { - .win-score { - margin-right: 50px; - } - - .lose-score { - margin-left: 50px; - } - - img { - height: 35px; - width: 35px; - border-radius: 50%; - border: 1px solid black; - } - - .names { - margin-left: 15px; - margin-right: 15px; - margin-top: -25px; - font-size: 20px; - font-weight: bold; - } - - mat-card { - // height: 175px; - } - - .score { - display: inline-block; - text-align: center; - height: 50px; - margin-top: 10px; - } - - .score-text { - margin-left: auto; - margin-right: auto; - font-size: 40px; - font-weight: bold; - } - - .winners, - .losers { - height: 35px; - } - - .losers { - margin-top: 5px; - } - - .w2 { - margin-left: -15px; - } - - .l2 { - margin-left: -15px; - z-index: 1; - } - - .l1 { - z-index: 2; - } - - .description { - margin-left: 20px; - margin-right: 20px; - font-size: 15px; - } - - .mat-divider { - // margin-left: 60px; - // margin-right: 60px; - } - - .mat-icon { - font-size: 20px; - padding-left: 15px; - vertical-align: middle; - } - - .likes, - .comments { - font-size: 15px; - margin-left: 0px; - } - - .commenty { - margin-left: 30px; - margin-right: 30px; - } - - .mat-form-field { - width: 100%; - } - - textarea { - height: 75px; - } - - .viewport { - height: 200px; - width: 100%; - margin-top: 20px; - } - - .comment-image { - height: 25px; - width: 25px; - border-radius: 50%; - border: 1px solid black; - } - - .comment-name { - display: inline-block; - margin-top: -16px; - font-weight: bold; - vertical-align: middle; - } - - .comment-text, - .comment-name { - // display: inline-block; - // margin-top: 5px; - margin-left: 5px; - } - - .comment-text { - // overflow: hidden; - // display: block; - } - - .comment-container { - display: flex; - flex-direction: column; - margin-top: 10px; - } - - .comment-likes { - display: inline-block; - vertical-align: middle; - margin-top: -12px; - } - - .comment-like-count { - margin-top: -16px; - display: inline-block; - vertical-align: middle; - } - - // .likes { - // position: absolute; - // margin-top: 5px; - // margin-left: 5px; /* optional */ - // } - - // .likes-relative { - // position: relative; - // top: -5px; - // margin-left: 5px; /* optional */ - // } -} diff --git a/frontend/ruski-app/src/app/modules/home/spec-game/spec-game.component.spec.ts b/frontend/ruski-app/src/app/modules/home/spec-game/spec-game.component.spec.ts deleted file mode 100644 index c3dd279..0000000 --- a/frontend/ruski-app/src/app/modules/home/spec-game/spec-game.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { SpecGameComponent } from './spec-game.component'; - -describe('SpecGameComponent', () => { - let component: SpecGameComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ SpecGameComponent ] - }) - .compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(SpecGameComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/frontend/ruski-app/src/app/modules/home/spec-game/spec-game.component.ts b/frontend/ruski-app/src/app/modules/home/spec-game/spec-game.component.ts deleted file mode 100644 index 713d71c..0000000 --- a/frontend/ruski-app/src/app/modules/home/spec-game/spec-game.component.ts +++ /dev/null @@ -1,120 +0,0 @@ -import { CommentService } from './../services/comment.service'; -import { FeedService } from './../services/feed.service'; -import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; -import { CurrentUserService } from '../services/current-user.service'; -import { Game } from '../game-feed-template'; -import { FormControl } from '@angular/forms'; - -@Component({ - selector: 'app-spec-game', - templateUrl: './spec-game.component.html', - styleUrls: ['./spec-game.component.scss'], -}) -export class SpecGameComponent implements OnInit { - game!: Game; - userID!: string; - winning_score: number; - losing_score: number; - alreadyLiked = false; - alreadyLikedComment: boolean[] = []; - commentLikeMirror: number[] = []; - commentTextMirror: string[] = []; - commentUserMirror: string[] = []; - commentControl = new FormControl(); - constructor( - private gameFetcher: FeedService, - private route: ActivatedRoute, - private hundy: CurrentUserService, - private commentService: CommentService, - private router: Router - ) {} - - ngOnInit(): void { - const id = this.route.snapshot.paramMap.get('id'); - this.gameFetcher.fetchSpecGame(id).subscribe((response) => { - this.game = response; - this.winning_score = 10; - this.losing_score = this.game.l1Cups + this.game.l2Cups; - if (this.losing_score > 9) { - this.losing_score = this.getRandomInt(5, 9); - } - this.game.description = - 'Dennis is very cool. Everyone else sucks. Dennis is very cool. Everyone else sucks. Dennis is very cool. Everyone else sucks. Dennis is very cool. Everyone else sucks. Dennis is very cool. Everyone else sucks. Dennis is very cool. Everyone else sucks.'; - // console.log(this.game); - this.gameFetcher - .getGameLikes(this.game.id) - .subscribe((response) => { - if (response.includes(this.userID)) { - // console.log('yessir'); - this.alreadyLiked = true; - // console.log(this.game.id); - // console.log(this.game.likes); - } else { - // console.log('nosir'); - this.alreadyLiked = false; - } - }); - // console.log(this.game.comments); - for (const comment of this.game.comments) { - this.alreadyLikedComment.push(false); - this.commentLikeMirror.push(comment['likes']); - // this.commentTextMirror.push(comment['text']); - // this.commentUserMirror.push(comment['user']['name']); - } - }); - this.hundy.getUserID().subscribe((response) => { - this.userID = response; - }); - } - - changeLikeCount(e: any) { - if (this.alreadyLiked) { - this.gameFetcher.decLike(this.game.id, this.userID); - this.game.likes -= 1; - this.alreadyLiked = false; - } else { - this.gameFetcher.incLike(this.game.id, this.userID); - this.game.likes += 1; - this.alreadyLiked = true; - } - } - - changeCommentLikeCount(e: any, i: number) { - if (this.alreadyLikedComment[i]) { - this.gameFetcher.decCommentLike( - this.game.comments[i]['id'], - this.userID - ); - this.commentLikeMirror[i] -= 1; - this.alreadyLikedComment[i] = false; - } else { - this.gameFetcher.incCommentLike( - this.game.comments[i]['id'], - this.userID - ); - console.log(this.userID); - this.commentLikeMirror[i] += 1; - this.alreadyLikedComment[i] = true; - } - } - - getRandomInt(min: number, max: number) { - min = Math.ceil(min); - max = Math.floor(max); - return Math.floor(Math.random() * (max - min) + min); - } - - postComment() { - const commentText = this.commentControl.value; - this.commentControl = new FormControl(); - this.commentService.addComment(this.userID, commentText, this.game.id); - // this.commentTextMirror.push(commentText); - // this.commentUserMirror.push('thebilly'); - // console.log(commentText); - } - - goBack() { - this.router.navigate(['/main/feed']); - } -} diff --git a/frontend/ruski-app/src/app/modules/material/material.module.ts b/frontend/ruski-app/src/app/modules/material/material.module.ts index 28be89e..d2e9fb3 100644 --- a/frontend/ruski-app/src/app/modules/material/material.module.ts +++ b/frontend/ruski-app/src/app/modules/material/material.module.ts @@ -8,9 +8,6 @@ import { MatAutocompleteModule } from '@angular/material/autocomplete'; import { MatRadioModule } from '@angular/material/radio'; import { MatPaginatorModule } from '@angular/material/paginator'; import { MatTableModule } from '@angular/material/table'; -import { MatCardModule } from '@angular/material/card'; -import { MatDividerModule } from '@angular/material/divider'; -import { ScrollingModule } from '@angular/cdk/scrolling'; const material = [ MatToolbarModule, @@ -22,9 +19,6 @@ const material = [ MatRadioModule, MatPaginatorModule, MatTableModule, - MatCardModule, - MatDividerModule, - ScrollingModule, ]; @NgModule({ diff --git a/frontend/ruski-app/src/environments/environment.prod.ts b/frontend/ruski-app/src/environments/environment.prod.ts index f9bf7ca..3612073 100644 --- a/frontend/ruski-app/src/environments/environment.prod.ts +++ b/frontend/ruski-app/src/environments/environment.prod.ts @@ -1,4 +1,3 @@ export const environment = { - production: true, - api: 'https://tenfoottalltim.cum.irish' + production: true }; diff --git a/frontend/ruski-app/src/environments/environment.ts b/frontend/ruski-app/src/environments/environment.ts index 33f12ad..7b4f817 100644 --- a/frontend/ruski-app/src/environments/environment.ts +++ b/frontend/ruski-app/src/environments/environment.ts @@ -3,8 +3,7 @@ // The list of file replacements can be found in `angular.json`. export const environment = { - production: false, - api: "http://localhost:4000" + production: false }; /* diff --git a/frontend/ruski-app/src/polyfills.ts b/frontend/ruski-app/src/polyfills.ts index b684565..d5f67bd 100644 --- a/frontend/ruski-app/src/polyfills.ts +++ b/frontend/ruski-app/src/polyfills.ts @@ -63,4 +63,3 @@ import 'zone.js/dist/zone'; // Included with Angular CLI. /*************************************************************************************************** * APPLICATION IMPORTS */ - import 'hammerjs/hammer'; \ No newline at end of file diff --git a/frontend/ruski-app/src/styles.scss b/frontend/ruski-app/src/styles.scss index 9862660..7e7239a 100644 --- a/frontend/ruski-app/src/styles.scss +++ b/frontend/ruski-app/src/styles.scss @@ -1,4 +1,4 @@ /* You can add global styles to this file, and also import other style files */ html, body { height: 100%; } -body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; } \ No newline at end of file +body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; }