From dd0f823a6d0e269dcae022caf911b235ce621ab1 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Sun, 31 Jan 2021 08:49:44 +0200 Subject: Moved language and technology class out of user model --- .../profile-settings/profile-settings.component.ts | 4 +++- src/DevHive.Angular/src/app/services/language.service.ts | 2 +- src/DevHive.Angular/src/app/services/technology.service.ts | 2 +- src/DevHive.Angular/src/models/identity/user.ts | 12 ++---------- src/DevHive.Angular/src/models/language.ts | 6 ++++++ src/DevHive.Angular/src/models/technology.ts | 6 ++++++ 6 files changed, 19 insertions(+), 13 deletions(-) create mode 100644 src/DevHive.Angular/src/models/language.ts create mode 100644 src/DevHive.Angular/src/models/technology.ts diff --git a/src/DevHive.Angular/src/app/components/profile-settings/profile-settings.component.ts b/src/DevHive.Angular/src/app/components/profile-settings/profile-settings.component.ts index e348b8b..1989a4d 100644 --- a/src/DevHive.Angular/src/app/components/profile-settings/profile-settings.component.ts +++ b/src/DevHive.Angular/src/app/components/profile-settings/profile-settings.component.ts @@ -7,9 +7,11 @@ import {AppConstants} from 'src/app/app-constants.module'; import {LanguageService} from 'src/app/services/language.service'; import {UserService} from 'src/app/services/user.service'; import {TechnologyService} from 'src/app/services/technology.service'; -import {Language, Technology, User} from 'src/models/identity/user'; +import {User} from 'src/models/identity/user'; import {ErrorBarComponent} from '../error-bar/error-bar.component'; import {SuccessBarComponent} from '../success-bar/success-bar.component'; +import {Language} from 'src/models/language'; +import {Technology} from 'src/models/technology'; @Component({ selector: 'app-profile-settings', diff --git a/src/DevHive.Angular/src/app/services/language.service.ts b/src/DevHive.Angular/src/app/services/language.service.ts index d85f178..65012e9 100644 --- a/src/DevHive.Angular/src/app/services/language.service.ts +++ b/src/DevHive.Angular/src/app/services/language.service.ts @@ -2,7 +2,7 @@ import {HttpClient, HttpHeaders, HttpParams} from '@angular/common/http'; import {Injectable} from '@angular/core'; import {Guid} from 'guid-typescript'; import {Observable} from 'rxjs'; -import {Language} from 'src/models/identity/user'; +import {Language} from 'src/models/language'; import {AppConstants} from '../app-constants.module'; @Injectable({ diff --git a/src/DevHive.Angular/src/app/services/technology.service.ts b/src/DevHive.Angular/src/app/services/technology.service.ts index 207303f..90f90d6 100644 --- a/src/DevHive.Angular/src/app/services/technology.service.ts +++ b/src/DevHive.Angular/src/app/services/technology.service.ts @@ -2,7 +2,7 @@ import {HttpClient, HttpHeaders, HttpParams} from '@angular/common/http'; import {Injectable} from '@angular/core'; import {Guid} from 'guid-typescript'; import {Observable} from 'rxjs'; -import {Technology} from 'src/models/identity/user'; +import {Technology} from 'src/models/technology'; import {AppConstants} from '../app-constants.module'; @Injectable({ diff --git a/src/DevHive.Angular/src/models/identity/user.ts b/src/DevHive.Angular/src/models/identity/user.ts index c92ed26..045d1d9 100644 --- a/src/DevHive.Angular/src/models/identity/user.ts +++ b/src/DevHive.Angular/src/models/identity/user.ts @@ -1,14 +1,6 @@ import { Guid } from 'guid-typescript'; - -export class Language { - public id: Guid; - public name: string; -} - -export class Technology { - public id: Guid; - public name: string; -} +import {Language} from '../language'; +import {Technology} from '../technology'; export class User { private _id : Guid; diff --git a/src/DevHive.Angular/src/models/language.ts b/src/DevHive.Angular/src/models/language.ts new file mode 100644 index 0000000..9ae6814 --- /dev/null +++ b/src/DevHive.Angular/src/models/language.ts @@ -0,0 +1,6 @@ +import {Guid} from 'guid-typescript'; + +export class Language { + public id: Guid; + public name: string; +} diff --git a/src/DevHive.Angular/src/models/technology.ts b/src/DevHive.Angular/src/models/technology.ts new file mode 100644 index 0000000..4235a86 --- /dev/null +++ b/src/DevHive.Angular/src/models/technology.ts @@ -0,0 +1,6 @@ +import {Guid} from 'guid-typescript'; + +export class Technology { + public id: Guid; + public name: string; +} -- cgit v1.2.3 From 19e64b5be3c5200fc3f7f46a47cfd8cf08c13aa7 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Sun, 31 Jan 2021 09:09:38 +0200 Subject: Slightly improved logic for showing "None" in language and technologies fields of user profile --- src/DevHive.Angular/src/app/components/profile/profile.component.html | 4 ++-- src/DevHive.Angular/src/app/components/profile/profile.component.ts | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/DevHive.Angular/src/app/components/profile/profile.component.html b/src/DevHive.Angular/src/app/components/profile/profile.component.html index ac0c07e..9cb4dd2 100644 --- a/src/DevHive.Angular/src/app/components/profile/profile.component.html +++ b/src/DevHive.Angular/src/app/components/profile/profile.component.html @@ -26,7 +26,7 @@ {{ lang.name }} -
+
 None
@@ -37,7 +37,7 @@ {{ tech.name }} -
+
 None
diff --git a/src/DevHive.Angular/src/app/components/profile/profile.component.ts b/src/DevHive.Angular/src/app/components/profile/profile.component.ts index 7717505..620c931 100644 --- a/src/DevHive.Angular/src/app/components/profile/profile.component.ts +++ b/src/DevHive.Angular/src/app/components/profile/profile.component.ts @@ -21,8 +21,6 @@ export class ProfileComponent implements OnInit { public dataArrived = false; public user: User; public userPosts: Post[] = []; - public showNoLangMsg = false; - public showNoTechMsg = false; constructor(private _router: Router, private _userService: UserService, private _languageService: LanguageService, private _technologyService: TechnologyService, private _feedService: FeedService, private _location: Location) { } @@ -53,7 +51,6 @@ export class ProfileComponent implements OnInit { }); } else { - this.showNoLangMsg = true; this.loadTechnologies(); } } @@ -68,7 +65,6 @@ export class ProfileComponent implements OnInit { }); } else { - this.showNoTechMsg = true; this.loadPosts(); } } -- cgit v1.2.3 From 0abe398de867368e1b1d9fc4bd6cd3b4e83cb0b6 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Sun, 31 Jan 2021 09:12:17 +0200 Subject: Added roles and friends to user model; updating now sends user's roles and friends --- .../profile-settings/profile-settings.component.ts | 2 +- .../src/app/services/user.service.ts | 15 ++++++++------- src/DevHive.Angular/src/models/identity/friend.ts | 3 +++ src/DevHive.Angular/src/models/identity/role.ts | 3 +++ src/DevHive.Angular/src/models/identity/user.ts | 22 +++++++++++++++++++++- 5 files changed, 36 insertions(+), 9 deletions(-) create mode 100644 src/DevHive.Angular/src/models/identity/friend.ts create mode 100644 src/DevHive.Angular/src/models/identity/role.ts diff --git a/src/DevHive.Angular/src/app/components/profile-settings/profile-settings.component.ts b/src/DevHive.Angular/src/app/components/profile-settings/profile-settings.component.ts index 1989a4d..83a5501 100644 --- a/src/DevHive.Angular/src/app/components/profile-settings/profile-settings.component.ts +++ b/src/DevHive.Angular/src/app/components/profile-settings/profile-settings.component.ts @@ -165,7 +165,7 @@ export class ProfileSettingsComponent implements OnInit { this.patchLanguagesControl(); this.patchTechnologiesControl(); - this._userService.putUserFromSessionStorageRequest(this.updateUserFormGroup).subscribe( + this._userService.putUserFromSessionStorageRequest(this.updateUserFormGroup, this.user.roles, this.user.friends).subscribe( res => this._successBar.showMsg('Profile updated successfully!'), (err: HttpErrorResponse) => this._errorBar.showError(err) ); diff --git a/src/DevHive.Angular/src/app/services/user.service.ts b/src/DevHive.Angular/src/app/services/user.service.ts index 6badf94..128e94b 100644 --- a/src/DevHive.Angular/src/app/services/user.service.ts +++ b/src/DevHive.Angular/src/app/services/user.service.ts @@ -8,6 +8,8 @@ import { FormGroup } from '@angular/forms'; import { AppConstants } from 'src/app/app-constants.module'; import {HttpClient, HttpErrorResponse, HttpHeaders, HttpParams} from '@angular/common/http'; import {Observable} from 'rxjs'; +import {Role} from 'src/models/identity/role'; +import {Friend} from 'src/models/identity/friend'; @Injectable({ providedIn: 'root' @@ -16,7 +18,7 @@ export class UserService { constructor(private http: HttpClient) { } getDefaultUser(): User { - return new User(Guid.createEmpty(), 'gosho_trapov', 'Gosho', 'Trapov', 'gotra@bg.com', AppConstants.FALLBACK_PROFILE_ICON, new Array(), new Array()); + return new User(Guid.createEmpty(), 'gosho_trapov', 'Gosho', 'Trapov', 'gotra@bg.com', AppConstants.FALLBACK_PROFILE_ICON, [], [], [], []); } getUserIdFromSessionStorageToken(): Guid { @@ -38,12 +40,12 @@ export class UserService { return this.getUserRequest(userCred.ID, jwt.token); } - putUserFromSessionStorageRequest(updateUserFormGroup: FormGroup): Observable { + putUserFromSessionStorageRequest(updateUserFormGroup: FormGroup, userRoles: Role[], userFriends: Friend[]): Observable { // Get the token and userid from session storage const jwt: IJWTPayload = { token: sessionStorage.getItem('UserCred') ?? '' }; const userCred = jwt_decode(jwt.token); - return this.putUserRequest(userCred.ID, jwt.token, updateUserFormGroup); + return this.putUserRequest(userCred.ID, jwt.token, updateUserFormGroup, userRoles, userFriends); } deleteUserFromSessionStorageRequest(): Observable { @@ -93,16 +95,15 @@ export class UserService { return this.http.get(AppConstants.API_USER_URL + '/GetUser', options); } - putUserRequest(userId: Guid, authToken: string, updateUserFormGroup: FormGroup): Observable { + putUserRequest(userId: Guid, authToken: string, updateUserFormGroup: FormGroup, userRoles: Role[], userFriends: Friend[]): Observable { const body = { UserName: updateUserFormGroup.get('username')?.value, Email: updateUserFormGroup.get('email')?.value, FirstName: updateUserFormGroup.get('firstName')?.value, LastName: updateUserFormGroup.get('lastName')?.value, Password: updateUserFormGroup.get('password')?.value, - // TODO: make the following fields dynamically selectable - Roles: [ { Name: 'User' } ], - Friends: [], + Roles: userRoles, + Friends: userFriends, Languages: updateUserFormGroup.get('languages')?.value, Technologies: updateUserFormGroup.get('technologies')?.value }; diff --git a/src/DevHive.Angular/src/models/identity/friend.ts b/src/DevHive.Angular/src/models/identity/friend.ts new file mode 100644 index 0000000..22290cd --- /dev/null +++ b/src/DevHive.Angular/src/models/identity/friend.ts @@ -0,0 +1,3 @@ +export class Friend { + public userName: string; +} diff --git a/src/DevHive.Angular/src/models/identity/role.ts b/src/DevHive.Angular/src/models/identity/role.ts new file mode 100644 index 0000000..132b0b0 --- /dev/null +++ b/src/DevHive.Angular/src/models/identity/role.ts @@ -0,0 +1,3 @@ +export class Role { + public name: string; +} diff --git a/src/DevHive.Angular/src/models/identity/user.ts b/src/DevHive.Angular/src/models/identity/user.ts index 045d1d9..f7b922c 100644 --- a/src/DevHive.Angular/src/models/identity/user.ts +++ b/src/DevHive.Angular/src/models/identity/user.ts @@ -1,6 +1,8 @@ import { Guid } from 'guid-typescript'; import {Language} from '../language'; import {Technology} from '../technology'; +import {Friend} from './friend'; +import {Role} from './role'; export class User { private _id : Guid; @@ -11,15 +13,19 @@ export class User { private _imageUrl : string; private _languages: Language[]; private _technologies: Technology[]; + private _roles: Role[]; + private _friends: Friend[]; - constructor(id: Guid, userName: string, firstName: string, lastName: string, email: string, imageUrl: string, languages: Language[], technologies: Technology[]) { + constructor(id: Guid, userName: string, firstName: string, lastName: string, email: string, imageUrl: string, languages: Language[], technologies: Technology[], roles: Role[], friends: Friend[]) { this.id = id; this.userName = userName; this.firstName = firstName; this.lastName = lastName; this.email = email; this.imageUrl = imageUrl; + this.languages = languages; this.technologies = technologies; + this.roles = roles; } public get id(): Guid { @@ -77,4 +83,18 @@ export class User { public set technologies(v: Technology[]) { this._technologies = v; } + + public get roles(): Role[] { + return this._roles; + } + public set roles(v: Role[]) { + this._roles = v; + } + + public get friends(): Friend[] { + return this._friends; + } + public set friends(v: Friend[]) { + this._friends = v; + } } -- cgit v1.2.3 From 77daf9d0b1122034712f6b3b2413519e84746e4c Mon Sep 17 00:00:00 2001 From: Syndamia Date: Sun, 31 Jan 2021 09:45:10 +0200 Subject: Fixed getting of feed posts --- src/DevHive.Data/Repositories/FeedRepository.cs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/DevHive.Data/Repositories/FeedRepository.cs b/src/DevHive.Data/Repositories/FeedRepository.cs index d8170d0..304697d 100644 --- a/src/DevHive.Data/Repositories/FeedRepository.cs +++ b/src/DevHive.Data/Repositories/FeedRepository.cs @@ -25,14 +25,16 @@ namespace DevHive.Data.Repositories List posts = await this._context.Posts .Where(post => post.TimeCreated < firstRequestIssued) .Where(p => friendsIds.Contains(p.Creator.Id)) - .Skip((pageNumber - 1) * pageSize) - .Take(pageSize) .ToListAsync(); // Ordering by descending can't happen in query, because it doesn't order it // completely correctly (example: in query these two times are ordered // like this: 2021-01-30T11:49:45, 2021-01-28T21:37:40.701244) - posts = posts.OrderByDescending(x => x.TimeCreated.ToFileTime()).ToList(); + posts = posts + .OrderByDescending(x => x.TimeCreated.ToFileTime()) + .Skip((pageNumber - 1) * pageSize) + .Take(pageSize) + .ToList(); return posts; } @@ -41,12 +43,14 @@ namespace DevHive.Data.Repositories List posts = await this._context.Posts .Where(post => post.TimeCreated < firstRequestIssued) .Where(p => p.Creator.Id == user.Id) - .Skip((pageNumber - 1) * pageSize) - .Take(pageSize) .ToListAsync(); // Look at GetFriendsPosts on why this is done like this - posts = posts.OrderByDescending(x => x.TimeCreated.ToFileTime()).ToList(); + posts = posts + .OrderByDescending(x => x.TimeCreated.ToFileTime()) + .Skip((pageNumber - 1) * pageSize) + .Take(pageSize) + .ToList(); return posts; } } -- cgit v1.2.3 From 157cd5f82aaa28b30dcfe5a4010e87bd90084c44 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Sun, 31 Jan 2021 09:46:33 +0200 Subject: Impelemented creating posts in feed --- .../src/app/components/feed/feed.component.css | 4 ++++ .../src/app/components/feed/feed.component.html | 5 ++++- .../src/app/components/feed/feed.component.ts | 22 +++++++++++++++++- .../src/app/services/post.service.ts | 26 ++++++++++++++++++++-- 4 files changed, 53 insertions(+), 4 deletions(-) diff --git a/src/DevHive.Angular/src/app/components/feed/feed.component.css b/src/DevHive.Angular/src/app/components/feed/feed.component.css index f810e83..7b73533 100644 --- a/src/DevHive.Angular/src/app/components/feed/feed.component.css +++ b/src/DevHive.Angular/src/app/components/feed/feed.component.css @@ -75,6 +75,10 @@ /* Top bar */ +form { + width: 100%; +} + #top-bar { display: flex; width: 98%; diff --git a/src/DevHive.Angular/src/app/components/feed/feed.component.html b/src/DevHive.Angular/src/app/components/feed/feed.component.html index e3c6e83..052f7b3 100644 --- a/src/DevHive.Angular/src/app/components/feed/feed.component.html +++ b/src/DevHive.Angular/src/app/components/feed/feed.component.html @@ -17,7 +17,10 @@