Browse Source

Refactoring

pull/1661/head
Thomas 3 years ago
parent
commit
e8660acd9d
  1. 2
      apps/api/src/app/admin/admin.service.ts
  2. 4
      apps/api/src/app/user/user.service.ts
  3. 12
      apps/client/src/app/components/admin-users/admin-users.component.ts
  4. 26
      apps/client/src/app/components/admin-users/admin-users.html
  5. 1
      libs/common/src/lib/interfaces/admin-data.interface.ts
  6. 2
      prisma/migrations/20230205173009_added_country_to_analytics/migration.sql

2
apps/api/src/app/admin/admin.service.ts

@ -244,6 +244,7 @@ export class AdminService {
Analytics: { Analytics: {
select: { select: {
activityCount: true, activityCount: true,
country: true,
updatedAt: true updatedAt: true
} }
}, },
@ -277,6 +278,7 @@ export class AdminService {
id, id,
subscription, subscription,
accountCount: _count.Account || 0, accountCount: _count.Account || 0,
country: Analytics.country,
lastActivity: Analytics.updatedAt, lastActivity: Analytics.updatedAt,
transactionCount: _count.Order || 0 transactionCount: _count.Order || 0
}; };

4
apps/api/src/app/user/user.service.ts

@ -18,6 +18,8 @@ import { Injectable } from '@nestjs/common';
import { Prisma, Role, User } from '@prisma/client'; import { Prisma, Role, User } from '@prisma/client';
import { sortBy } from 'lodash'; import { sortBy } from 'lodash';
import { CreateUserDto } from './create-user.dto';
const crypto = require('crypto'); const crypto = require('crypto');
@Injectable() @Injectable()
@ -234,7 +236,7 @@ export class UserService {
public async createUser({ public async createUser({
country, country,
data data
}: { country?: string } & { data: Prisma.UserCreateInput }): Promise<User> { }: CreateUserDto & { data: Prisma.UserCreateInput }): Promise<User> {
if (!data?.provider) { if (!data?.provider) {
data.provider = 'ANONYMOUS'; data.provider = 'ANONYMOUS';
} }

12
apps/client/src/app/components/admin-users/admin-users.component.ts

@ -1,7 +1,8 @@
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
import { DataService } from '@ghostfolio/client/services/data.service'; import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service'; import { UserService } from '@ghostfolio/client/services/user/user.service';
import { AdminData, User } from '@ghostfolio/common/interfaces'; import { AdminData, InfoItem, User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { import {
differenceInSeconds, differenceInSeconds,
formatDistanceToNowStrict, formatDistanceToNowStrict,
@ -16,6 +17,8 @@ import { takeUntil } from 'rxjs/operators';
templateUrl: './admin-users.html' templateUrl: './admin-users.html'
}) })
export class AdminUsersComponent implements OnDestroy, OnInit { export class AdminUsersComponent implements OnDestroy, OnInit {
public hasPermissionForSubscription: boolean;
public info: InfoItem;
public user: User; public user: User;
public users: AdminData['users']; public users: AdminData['users'];
@ -26,6 +29,13 @@ export class AdminUsersComponent implements OnDestroy, OnInit {
private dataService: DataService, private dataService: DataService,
private userService: UserService private userService: UserService
) { ) {
this.info = this.dataService.fetchInfo();
this.hasPermissionForSubscription = hasPermission(
this.info?.globalPermissions,
permissions.enableSubscription
);
this.userService.stateChanged this.userService.stateChanged
.pipe(takeUntil(this.unsubscribeSubject)) .pipe(takeUntil(this.unsubscribeSubject))
.subscribe((state) => { .subscribe((state) => {

26
apps/client/src/app/components/admin-users/admin-users.html

@ -7,7 +7,13 @@
<tr class="mat-header-row"> <tr class="mat-header-row">
<th class="mat-header-cell px-1 py-2 text-right">#</th> <th class="mat-header-cell px-1 py-2 text-right">#</th>
<th class="mat-header-cell px-1 py-2" i18n>User</th> <th class="mat-header-cell px-1 py-2" i18n>User</th>
<th class="mat-header-cell px-1 py-2 text-right"> <th
*ngIf="hasPermissionForSubscription"
class="mat-header-cell px-1 py-2 text-right"
>
<ng-container i18n>Country</ng-container>
</th>
<th class="mat-header-cell px-1 py-2">
<ng-container i18n>Registration</ng-container> <ng-container i18n>Registration</ng-container>
</th> </th>
<th class="mat-header-cell px-1 py-2 text-right"> <th class="mat-header-cell px-1 py-2 text-right">
@ -16,7 +22,10 @@
<th class="mat-header-cell px-1 py-2 text-right"> <th class="mat-header-cell px-1 py-2 text-right">
<ng-container i18n>Activities</ng-container> <ng-container i18n>Activities</ng-container>
</th> </th>
<th class="mat-header-cell px-1 py-2 text-right"> <th
*ngIf="hasPermissionForSubscription"
class="mat-header-cell px-1 py-2 text-right"
>
<ng-container i18n>Engagement per Day</ng-container> <ng-container i18n>Engagement per Day</ng-container>
</th> </th>
<th class="mat-header-cell px-1 py-2" i18n>Last Request</th> <th class="mat-header-cell px-1 py-2" i18n>Last Request</th>
@ -41,7 +50,13 @@
></gf-premium-indicator> ></gf-premium-indicator>
</div> </div>
</td> </td>
<td class="mat-cell px-1 py-2 text-right"> <td
*ngIf="hasPermissionForSubscription"
class="mat-cell px-1 py-2 text-right"
>
{{ userItem.country }}
</td>
<td class="mat-cell px-1 py-2">
{{ formatDistanceToNow(userItem.createdAt) }} {{ formatDistanceToNow(userItem.createdAt) }}
</td> </td>
<td class="mat-cell px-1 py-2 text-right"> <td class="mat-cell px-1 py-2 text-right">
@ -58,7 +73,10 @@
[value]="userItem.transactionCount" [value]="userItem.transactionCount"
></gf-value> ></gf-value>
</td> </td>
<td class="mat-cell px-1 py-2 text-right"> <td
*ngIf="hasPermissionForSubscription"
class="mat-cell px-1 py-2 text-right"
>
<gf-value <gf-value
class="d-inline-block justify-content-end" class="d-inline-block justify-content-end"
[locale]="user?.settings?.locale" [locale]="user?.settings?.locale"

1
libs/common/src/lib/interfaces/admin-data.interface.ts

@ -5,6 +5,7 @@ export interface AdminData {
userCount: number; userCount: number;
users: { users: {
accountCount: number; accountCount: number;
country: string;
createdAt: Date; createdAt: Date;
engagement: number; engagement: number;
id: string; id: string;

2
prisma/migrations/20230205173009_added_country_to_analytics/migration.sql

@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "Analytics" ADD COLUMN "country" TEXT;
Loading…
Cancel
Save