Просмотр исходного кода

Added description field for Tracks

Lukas Angerer 2 лет назад
Родитель
Сommit
64be91b266

+ 1 - 1
src/RunnersMeet.Client/src/app/events/event-edit/event-edit.component.html

@@ -11,7 +11,7 @@
 	</div>
 	<div class="form-field form-field--full-width">
 		<span class="p-float-label">
-			<textarea id="description" name="description" rows="10" cols="20" pInputTextarea [(ngModel)]="event.description"></textarea>
+			<textarea id="description" name="description" rows="10" pInputTextarea [(ngModel)]="event.description"></textarea>
 			<label for="description">Description</label>
 		</span>
 	</div>

+ 8 - 4
src/RunnersMeet.Client/src/app/tracks-api.service.ts

@@ -17,19 +17,23 @@ export class TracksApiService {
 	) { }
 
 	public getTracks(searchParams: TrackSearchParams): Promise<ResultPage<Track>> {
-		return lastValueFrom(this.http.get<ResultPage<Track>>(this.config.apiUri(`/api/tracks`), { params: searchParams.toHttpParams() }));
+		return lastValueFrom(this.http.get<ResultPage<Track>>(this.config.apiUri(`/api/tracks`), { params: searchParams.toHttpParams() }))
+			.then(page => (ResultPage<Track>).deserialize(page, Track));
 	}
 
 	public createTrack(formData: FormData): Promise<Track> {
-		return lastValueFrom(this.http.post<Track>(this.config.apiUri(`/api/tracks`), formData));
+		return lastValueFrom(this.http.post<Track>(this.config.apiUri(`/api/tracks`), formData))
+			.then(track => Track.deserialize(track));
 	}
 
 	public getTrack(trackId: string): Promise<Track> {
-		return lastValueFrom(this.http.get<Track>(this.config.apiUri(`/api/tracks/${trackId}`)));
+		return lastValueFrom(this.http.get<Track>(this.config.apiUri(`/api/tracks/${trackId}`)))
+			.then(track => Track.deserialize(track));
 	}
 
 	public updateTrack(track: Track): Promise<Track> {
-		return lastValueFrom(this.http.put<Track>(this.config.apiUri(`/api/tracks/${track.trackId}`), track));
+		return lastValueFrom(this.http.put<Track>(this.config.apiUri(`/api/tracks/${track.trackId}`), track))
+			.then(track => Track.deserialize(track));
 	}
 
 	public deleteTrack(track: Track): Promise<void> {

+ 11 - 5
src/RunnersMeet.Client/src/app/tracks/track-edit/track-edit.component.html

@@ -6,8 +6,6 @@
 	<dd>{{ track?.owner?.userId }} / {{ track?.owner?.displayName }}</dd>
 	<dt>File Hash</dt>
 	<dd>{{ track?.fileHash }}</dd>
-	<dt>Title</dt>
-	<dd>{{ track?.displayName }}</dd>
 	<dt>Distance</dt>
 	<dd>{{ track?.distance | distance }}</dd>
 	<dt>Elevation up</dt>
@@ -18,9 +16,17 @@
 
 <h1>Edit Track Details</h1>
 <form class="vertical-form" (ngSubmit)="updateTrack($event)" *ngIf="track">
-	<span class="p-float-label">
-		<input type="text" pInputText name="displayName" [(ngModel)]="track.displayName" placeholder="Title">
-	</span>
+	<div class="form-field form-field--full-width">
+		<span class="p-float-label">
+			<input type="text" pInputText name="displayName" [(ngModel)]="track.displayName" placeholder="Title">
+		</span>
+	</div>
+	<div class="form-field form-field--full-width">
+		<span class="p-float-label">
+			<textarea id="description" name="description" rows="10" pInputTextarea [(ngModel)]="track.description"></textarea>
+			<label for="description">Description</label>
+		</span>
+	</div>
 	<div class="button-group">
 		<button type="submit" pButton>Save</button>
 		<button type="button" pButton class="p-button-danger" (click)="deleteTrack()">Delete</button>

+ 1 - 1
src/RunnersMeet.Client/src/app/tracks/track-list-item/track-list-item.component.html

@@ -6,7 +6,7 @@
 		↔{{ track?.distance | distance }} ↑{{ track?.elevationUp | elevation:'up' }} ↓{{ track?.elevationDown | elevation:'down' }}
 	</ng-template>
 	<ng-template pTemplate="content">
-		{{ track?.trackId }} - {{ track?.fileHash }}
+		{{ track?.description }}
 	</ng-template>
 	<ng-template pTemplate="footer">
 		<div class="button-group">

+ 0 - 9
src/RunnersMeet.Client/src/app/tracks/track-list-item/track-list-item.component.ts

@@ -22,13 +22,4 @@ export class TrackListItemComponent implements OnInit {
 	public ngOnInit(): void {
 		this.downloadUrl = this.tracksApi.getTrackGpxUrl(this.track!);
 	}
-
-	// public downloadGpx(): void {
-	// 	this.tracksApi.downloadTrack(this.track!).then(file => {
-	// 		if (file.blob) {
-	// 			this.downloadUrl = this.sanitizer.bypassSecurityTrustUrl(window.URL.createObjectURL(file.blob));
-	// 			this.downloadFileName = file.filename
-	// 		}
-	// 	});
-	// }
 }

+ 2 - 0
src/RunnersMeet.Client/src/app/tracks/track-view/track-view.component.html

@@ -9,6 +9,8 @@
 	<dd>{{ track?.fileHash }}</dd>
 	<dt>Title</dt>
 	<dd>{{ track?.displayName }}</dd>
+	<dt>Description</dt>
+	<dd>{{ track?.description }}</dd>
 	<dt>Distance</dt>
 	<dd>{{ track?.distance | distance }}</dd>
 	<dt>Elevation up</dt>

+ 7 - 0
src/RunnersMeet.Client/src/app/tracks/track.ts

@@ -5,7 +5,14 @@ export class Track {
 	public owner: UserProfile = new UserProfile();
 	public fileHash: string = '';
 	public displayName: string = '';
+	public description: string = '';
 	public distance: number = 0;
 	public elevationUp: number = 0;
 	public elevationDown: number = 0;
+
+	public static deserialize(data: Readonly<Track>): Track {
+		const obj = new Track();
+		Object.assign(obj, data);
+		return obj;
+	}
 }

+ 1 - 0
src/RunnersMeet.Server/Domain/Track.cs

@@ -16,6 +16,7 @@ public class Track : IUserData
 	public string OwnerId { get; set; } = String.Empty;
 	public string FileHash { get; set; } = String.Empty;
 	public string DisplayName { get; set; } = String.Empty;
+	public string Description { get; set; } = String.Empty;
 	public double Distance { get; set; }
 	public double ElevationUp { get; set; }
 	public double ElevationDown { get; set; }

+ 1 - 0
src/RunnersMeet.Server/Persistence/UpdateTrackCommand.cs

@@ -27,6 +27,7 @@ public class UpdateTrackCommand : IRequestHandler<TrackUpdate, Track>
 		}
 
 		dbTrack.DisplayName = request.Track.DisplayName;
+		dbTrack.Description = request.Track.Description;
 
 		_database.Tracks.Update(dbTrack);