changed project add/edit to latest backend

This commit is contained in:
Timo Bejan 2020-10-23 11:18:34 +03:00
parent 6e4fccb593
commit 324119f1f9
11 changed files with 137 additions and 347 deletions

View File

@ -3,7 +3,7 @@
## Swagger Generated Code
To regnerate http rune swaagger
```
BASE=http://ingress.redaction-timo-dev-3011.178.63.47.73.xip.io/
BASE=http://ingress.redaction-timo-dev-401.178.63.47.73.xip.io/
URL="$BASE"v2/api-docs?group=redaction-gateway-v1
mkdir -p /tmp/swagger
swagger-codegen generate -i "$URL" -l typescript-angular -o /tmp/swagger

View File

@ -57,6 +57,7 @@ import { AuthErrorComponent } from './screens/auth-error/auth-error.component';
import { RedRoleGuard } from './auth/red-role.guard';
import { MatListModule } from '@angular/material/list';
import { AssignOwnerDialogComponent } from './dialogs/assign-owner-dialog/assign-owner-dialog.component';
import {MatDatepickerModule} from "@angular/material/datepicker";
export function HttpLoaderFactory(httpClient: HttpClient) {
return new TranslateHttpLoader(httpClient, '/assets/i18n/', '.json');
@ -84,86 +85,87 @@ export function HttpLoaderFactory(httpClient: HttpClient) {
AnnotationIconComponent,
AuthErrorComponent
],
imports: [
BrowserModule,
BrowserAnimationsModule,
FormsModule,
ReactiveFormsModule,
HttpClientModule,
AuthModule,
IconsModule,
ApiModule,
MatDialogModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient]
}
}),
RouterModule.forRoot([
{
path: '',
redirectTo: 'ui/projects',
pathMatch: 'full'
},
{
path: 'auth-error',
component: AuthErrorComponent,
canActivate: [AuthGuard]
},
{
path: 'ui',
component: BaseScreenComponent,
children: [
{
path: 'projects',
component: ProjectListingScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
imports: [
BrowserModule,
BrowserAnimationsModule,
FormsModule,
ReactiveFormsModule,
HttpClientModule,
AuthModule,
IconsModule,
ApiModule,
MatDialogModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient]
}
},
{
path: 'projects/:projectId',
component: ProjectOverviewScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}),
RouterModule.forRoot([
{
path: '',
redirectTo: 'ui/projects',
pathMatch: 'full'
},
{
path: 'auth-error',
component: AuthErrorComponent,
canActivate: [AuthGuard]
},
{
path: 'ui',
component: BaseScreenComponent,
children: [
{
path: 'projects',
component: ProjectListingScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{
path: 'projects/:projectId',
component: ProjectOverviewScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{
path: 'projects/:projectId/file/:fileId',
component: FilePreviewScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
}
]
}
},
{
path: 'projects/:projectId/file/:fileId',
component: FilePreviewScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
}
]
}
]),
NgpSortModule,
MatToolbarModule,
MatButtonModule,
MatSlideToggleModule,
MatMenuModule,
MatIconModule,
MatTooltipModule,
MatSnackBarModule,
MatTabsModule,
MatButtonToggleModule,
MatFormFieldModule,
ToastrModule.forRoot(),
MatSelectModule,
MatSidenavModule,
FileUploadModule,
ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production }),
MatProgressSpinnerModule,
MatCheckboxModule,
MatListModule
],
]),
NgpSortModule,
MatToolbarModule,
MatButtonModule,
MatSlideToggleModule,
MatMenuModule,
MatIconModule,
MatTooltipModule,
MatSnackBarModule,
MatTabsModule,
MatButtonToggleModule,
MatFormFieldModule,
ToastrModule.forRoot(),
MatSelectModule,
MatSidenavModule,
FileUploadModule,
ServiceWorkerModule.register('ngsw-worker.js', {enabled: environment.production}),
MatProgressSpinnerModule,
MatCheckboxModule,
MatListModule,
MatDatepickerModule
],
providers: [{
provide: HTTP_INTERCEPTORS,
multi: true,

View File

@ -16,6 +16,17 @@
<label translate="project-listing.add-edit-dialog.form.description.label"></label>
<textarea formControlName="description" name="description" type="text" rows="5"></textarea>
</div>
<!-- <div class="red-input-group">-->
<!-- <mat-form-field appearance="fill">-->
<!-- <mat-label>{{'project-listing.add-edit-dialog.form.dueDate.label' | translate}}</mat-label>-->
<!-- <input matInput [matDatepicker]="picker">-->
<!-- <mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>-->
<!-- <mat-datepicker #picker formControlName="dueDate"></mat-datepicker>-->
<!-- </mat-form-field>-->
<!-- </div>-->
</div>
<div class="dialog-actions">

View File

@ -23,7 +23,8 @@ export class AddEditProjectDialogComponent implements OnInit {
ngOnInit(): void {
this.projectForm = this._formBuilder.group({
projectName: [this.project?.projectName, Validators.required],
description: [this.project?.description]
description: [this.project?.description],
// dueDate: [this.project?.dueDate]
});
}
@ -39,6 +40,7 @@ export class AddEditProjectDialogComponent implements OnInit {
return {
projectName: this.projectForm.get('projectName').value,
description: this.projectForm.get('description').value,
// dueDate: this.projectForm.get('dueDate').value
}
}
}

View File

@ -56,22 +56,11 @@ export class AssignOwnerDialogComponent {
const ownerId = this.usersForm.get('singleUser').value;
const memberIds = this.usersForm.get('userList').value;
const project = this.data.project;
await this._projectControllerService.addMembersToProject({memberIds: memberIds}, project.projectId).toPromise();
await this._projectControllerService.assignProjectOwner(project.projectId, ownerId).toPromise();
const updatedProject = await this._projectControllerService.getProject(project.projectId).toPromise();
const toRemoveMembers = updatedProject.memberIds.filter(m => memberIds.indexOf(m) < 0);
if (toRemoveMembers.length > 0) {
await this._projectControllerService.deleteMembersToProject({memberIds: toRemoveMembers}, project.projectId).toPromise();
}
project.ownerId = ownerId;
project.memberIds = [...new Set([ownerId, ...memberIds])];
const project = Object.assign({},this.data.project);
project.memberIds = memberIds;
project.ownerId = ownerId;
await this._appStateService.addOrUpdateProject(project);
this._notificationService.showToastNotification('Successfully assigned ' + this.userService.getNameForId(ownerId) + ' to project: ' + project.projectName);
}
if (this.data.type === 'file') {

View File

@ -167,12 +167,7 @@ export class AppStateService {
async addOrUpdateProject(project: Project) {
try {
let updatedProject;
if (project?.projectId) {
updatedProject = await this._projectControllerService.updateProject(project, project.projectId).toPromise();
} else {
updatedProject = await this._projectControllerService.createProject(project).toPromise();
}
const updatedProject = await this._projectControllerService.createProjectOrUpdateProject(project).toPromise();
const foundProject = this._appState.projects.find(p => p.project.projectId === updatedProject.projectId);
if (foundProject) {
Object.assign(foundProject.project, updatedProject);

View File

@ -16,7 +16,6 @@ import {HttpClient, HttpEvent, HttpHeaders, HttpResponse} from '@angular/common/
import {Observable} from 'rxjs';
import {Project} from '../model/project';
import {ProjectMembers} from '../model/projectMembers';
import {ProjectRequest} from '../model/projectRequest';
import {BASE_PATH} from '../variables';
@ -56,128 +55,19 @@ export class ProjectControllerService {
/**
* Adds members to project.
* Creates or update a project.
* None
* @param body projectMembers
* @param projectId projectId
* @param body project
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
* @param reportProgress flag to report request and response progress.
*/
public addMembersToProject(body: ProjectMembers, projectId: string, observe?: 'body', reportProgress?: boolean): Observable<any>;
public addMembersToProject(body: ProjectMembers, projectId: string, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<any>>;
public addMembersToProject(body: ProjectMembers, projectId: string, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<any>>;
public addMembersToProject(body: ProjectMembers, projectId: string, observe: any = 'body', reportProgress: boolean = false): Observable<any> {
public createProjectOrUpdateProject(body: ProjectRequest, observe?: 'body', reportProgress?: boolean): Observable<Project>;
public createProjectOrUpdateProject(body: ProjectRequest, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Project>>;
public createProjectOrUpdateProject(body: ProjectRequest, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Project>>;
public createProjectOrUpdateProject(body: ProjectRequest, observe: any = 'body', reportProgress: boolean = false): Observable<any> {
if (body === null || body === undefined) {
throw new Error('Required parameter body was null or undefined when calling addMembersToProject.');
}
if (projectId === null || projectId === undefined) {
throw new Error('Required parameter projectId was null or undefined when calling addMembersToProject.');
}
let headers = this.defaultHeaders;
// authentication (RED-OAUTH) required
if (this.configuration.accessToken) {
const accessToken = typeof this.configuration.accessToken === 'function'
? this.configuration.accessToken()
: this.configuration.accessToken;
headers = headers.set('Authorization', 'Bearer ' + accessToken);
}
// to determine the Accept header
const httpHeaderAccepts: string[] = [];
const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);
if (httpHeaderAcceptSelected !== undefined) {
headers = headers.set('Accept', httpHeaderAcceptSelected);
}
// to determine the Content-Type header
const consumes: string[] = [
'application/json'
];
const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes);
if (httpContentTypeSelected !== undefined) {
headers = headers.set('Content-Type', httpContentTypeSelected);
}
return this.httpClient.request<any>('post', `${this.basePath}/project/members/${encodeURIComponent(String(projectId))}`,
{
body: body,
withCredentials: this.configuration.withCredentials,
headers: headers,
observe: observe,
reportProgress: reportProgress
}
);
}
/**
* Assigns new owner to project.
* None
* @param projectId projectId
* @param ownerId ownerId
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
* @param reportProgress flag to report request and response progress.
*/
public assignProjectOwner(projectId: string, ownerId: string, observe?: 'body', reportProgress?: boolean): Observable<any>;
public assignProjectOwner(projectId: string, ownerId: string, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<any>>;
public assignProjectOwner(projectId: string, ownerId: string, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<any>>;
public assignProjectOwner(projectId: string, ownerId: string, observe: any = 'body', reportProgress: boolean = false): Observable<any> {
if (projectId === null || projectId === undefined) {
throw new Error('Required parameter projectId was null or undefined when calling assignProjectOwner.');
}
if (ownerId === null || ownerId === undefined) {
throw new Error('Required parameter ownerId was null or undefined when calling assignProjectOwner.');
}
let headers = this.defaultHeaders;
// authentication (RED-OAUTH) required
if (this.configuration.accessToken) {
const accessToken = typeof this.configuration.accessToken === 'function'
? this.configuration.accessToken()
: this.configuration.accessToken;
headers = headers.set('Authorization', 'Bearer ' + accessToken);
}
// to determine the Accept header
const httpHeaderAccepts: string[] = [];
const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);
if (httpHeaderAcceptSelected !== undefined) {
headers = headers.set('Accept', httpHeaderAcceptSelected);
}
// to determine the Content-Type header
const consumes: string[] = [];
return this.httpClient.request<any>('post', `${this.basePath}/project/${encodeURIComponent(String(projectId))}/${encodeURIComponent(String(ownerId))}`,
{
withCredentials: this.configuration.withCredentials,
headers: headers,
observe: observe,
reportProgress: reportProgress
}
);
}
/**
* Creates a new project.
* None
* @param body projectRequest
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
* @param reportProgress flag to report request and response progress.
*/
public createProject(body: ProjectRequest, observe?: 'body', reportProgress?: boolean): Observable<Project>;
public createProject(body: ProjectRequest, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Project>>;
public createProject(body: ProjectRequest, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Project>>;
public createProject(body: ProjectRequest, observe: any = 'body', reportProgress: boolean = false): Observable<any> {
if (body === null || body === undefined) {
throw new Error('Required parameter body was null or undefined when calling createProject.');
throw new Error('Required parameter body was null or undefined when calling createProjectOrUpdateProject.');
}
let headers = this.defaultHeaders;
@ -219,55 +109,6 @@ export class ProjectControllerService {
);
}
/**
* Deletes members from project.
* None
* @param body projectMembers
* @param projectId projectId
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
* @param reportProgress flag to report request and response progress.
*/
public deleteMembersToProject(body: ProjectMembers, projectId: string, observe?: 'body', reportProgress?: boolean): Observable<any>;
public deleteMembersToProject(body: ProjectMembers, projectId: string, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<any>>;
public deleteMembersToProject(body: ProjectMembers, projectId: string, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<any>>;
public deleteMembersToProject(body: ProjectMembers, projectId: string, observe: any = 'body', reportProgress: boolean = false): Observable<any> {
if (body === null || body === undefined) {
throw new Error('Required parameter body was null or undefined when calling deleteMembersToProject.');
}
if (projectId === null || projectId === undefined) {
throw new Error('Required parameter projectId was null or undefined when calling deleteMembersToProject.');
}
let headers = this.defaultHeaders;
// authentication (RED-OAUTH) required
if (this.configuration.accessToken) {
const accessToken = typeof this.configuration.accessToken === 'function'
? this.configuration.accessToken()
: this.configuration.accessToken;
headers = headers.set('Authorization', 'Bearer ' + accessToken);
}
// to determine the Accept header
const httpHeaderAccepts: string[] = [];
const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);
if (httpHeaderAcceptSelected !== undefined) {
headers = headers.set('Accept', httpHeaderAcceptSelected);
}
return this.httpClient.request<any>('delete', `${this.basePath}/project/members/${encodeURIComponent(String(projectId))}`,
{
body: body,
withCredentials: this.configuration.withCredentials,
headers: headers,
observe: observe,
reportProgress: reportProgress
}
);
}
/**
* Deletes an existing project.
* None
@ -405,64 +246,4 @@ export class ProjectControllerService {
);
}
/**
* Updates an existing project.
* None
* @param body projectRequest
* @param projectId projectId
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
* @param reportProgress flag to report request and response progress.
*/
public updateProject(body: ProjectRequest, projectId: string, observe?: 'body', reportProgress?: boolean): Observable<Project>;
public updateProject(body: ProjectRequest, projectId: string, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Project>>;
public updateProject(body: ProjectRequest, projectId: string, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Project>>;
public updateProject(body: ProjectRequest, projectId: string, observe: any = 'body', reportProgress: boolean = false): Observable<any> {
if (body === null || body === undefined) {
throw new Error('Required parameter body was null or undefined when calling updateProject.');
}
if (projectId === null || projectId === undefined) {
throw new Error('Required parameter projectId was null or undefined when calling updateProject.');
}
let headers = this.defaultHeaders;
// authentication (RED-OAUTH) required
if (this.configuration.accessToken) {
const accessToken = typeof this.configuration.accessToken === 'function'
? this.configuration.accessToken()
: this.configuration.accessToken;
headers = headers.set('Authorization', 'Bearer ' + accessToken);
}
// to determine the Accept header
const httpHeaderAccepts: string[] = [
'application/json'
];
const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);
if (httpHeaderAcceptSelected !== undefined) {
headers = headers.set('Accept', httpHeaderAcceptSelected);
}
// to determine the Content-Type header
const consumes: string[] = [
'application/json'
];
const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes);
if (httpContentTypeSelected !== undefined) {
headers = headers.set('Content-Type', httpContentTypeSelected);
}
return this.httpClient.request<Project>('post', `${this.basePath}/project/${encodeURIComponent(String(projectId))}`,
{
body: body,
withCredentials: this.configuration.withCredentials,
headers: headers,
observe: observe,
reportProgress: reportProgress
}
);
}
}

View File

@ -18,7 +18,6 @@ export * from './modelFile';
export * from './pdfMetaData';
export * from './point';
export * from './project';
export * from './projectMembers';
export * from './projectRequest';
export * from './rectangle';
export * from './redactionLog';

View File

@ -16,6 +16,7 @@ export interface Project {
memberIds?: Array<string>;
ownerId?: string;
projectId?: string;
dueDate?: string;
projectName?: string;
status?: Project.StatusEnum;
}

View File

@ -1,15 +0,0 @@
/**
* API Documentation for Redaction Gateway
* Description for redaction
*
* OpenAPI spec version: 1.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
export interface ProjectMembers {
memberIds?: Array<string>;
}

View File

@ -3,14 +3,39 @@
* Description for redaction
*
* OpenAPI spec version: 1.0
*
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
export interface ProjectRequest {
projectName?: string;
description?: string;
}
/**
* Object containing information about a project.
*/
export interface ProjectRequest {
/**
* The project's description (optional).
*/
description?: string;
/**
* The date when the project is due.
*/
dueDate?: string;
/**
* The id(s) of members associated to this project.
*/
memberIds?: Array<string>;
/**
* The id of the owning user.
*/
ownerId?: string;
/**
* The id of the project, can be null for create requests.
*/
projectId?: string;
/**
* The name of the project. Must be unique.
*/
projectName?: string;
}