Browse Source

Remove entries from cache.

pull/95/head
Sebastian Stehle 8 years ago
parent
commit
16e68e726f
  1. 13
      src/Squidex/app/framework/services/local-cache.service.spec.ts
  2. 4
      src/Squidex/app/framework/services/local-cache.service.ts
  3. 49
      src/Squidex/app/shared/services/assets.service.ts
  4. 20
      src/Squidex/app/shared/services/contents.service.ts
  5. 17
      src/Squidex/app/shared/services/schemas.service.ts

13
src/Squidex/app/framework/services/local-cache.service.spec.ts

@ -30,7 +30,7 @@ describe('LocalCache', () => {
expect(localCacheService.get('key')).toBe(value); expect(localCacheService.get('key')).toBe(value);
}); });
it('should get and store item in cache', () => { it('should not retrieve item if cleared', () => {
const localCacheService = new LocalCacheService(); const localCacheService = new LocalCacheService();
const value = {}; const value = {};
@ -41,6 +41,17 @@ describe('LocalCache', () => {
expect(localCacheService.get('key')).toBeUndefined(); expect(localCacheService.get('key')).toBeUndefined();
}); });
it('should not retrieve item if removed', () => {
const localCacheService = new LocalCacheService();
const value = {};
localCacheService.set('key', value);
localCacheService.remove('key');
expect(localCacheService.get('key')).toBeUndefined();
});
it('should not retrieve item if expired', () => { it('should not retrieve item if expired', () => {
const localCacheService = new LocalCacheService(); const localCacheService = new LocalCacheService();

4
src/Squidex/app/framework/services/local-cache.service.ts

@ -48,6 +48,10 @@ export class LocalCacheService {
this.entries[key] = { value, expires: new Date().getTime() + expiresIn }; this.entries[key] = { value, expires: new Date().getTime() + expiresIn };
} }
public remove(key: string) {
delete this.entries[key];
}
private static isExpired(now: number, entry: Entry): boolean { private static isExpired(now: number, entry: Entry): boolean {
return entry.expires < now; return entry.expires < now;
} }

49
src/Squidex/app/shared/services/assets.service.ts

@ -236,25 +236,23 @@ export class AssetsService {
} }
public replaceFile(appName: string, id: string, file: File, version?: Version): Observable<number | AssetReplacedDto> { public replaceFile(appName: string, id: string, file: File, version?: Version): Observable<number | AssetReplacedDto> {
return new Observable<number | AssetReplacedDto>(subscriber => { const url = this.apiUrl.buildUrl(`api/apps/${appName}/assets/${id}/content`);
const url = this.apiUrl.buildUrl(`api/apps/${appName}/assets/${id}/content`);
const req = new HttpRequest('PUT', url, getFormData(file), {
const req = new HttpRequest('PUT', url, getFormData(file), { headers: new HttpHeaders({
headers: new HttpHeaders({ 'If-Match': version.value
'If-Match': version.value }),
}), reportProgress: true
reportProgress: true });
});
return this.http.request(req)
this.http.request(req) .map(event => {
.pretifyError('Failed to replace asset. Please reload.')
.subscribe(event => {
if (event.type === HttpEventType.UploadProgress) { if (event.type === HttpEventType.UploadProgress) {
const percentDone = Math.round(100 * event.loaded / event.total); const percentDone = Math.round(100 * event.loaded / event.total);
subscriber.next(percentDone); return percentDone;
} else if (event instanceof HttpResponse) { } else if (event instanceof HttpResponse) {
const response = event.body; const response: any = event.body;
const dto = new AssetReplacedDto( const dto = new AssetReplacedDto(
response.fileSize, response.fileSize,
@ -265,27 +263,26 @@ export class AssetsService {
response.pixelHeight, response.pixelHeight,
new Version(response.version.toString())); new Version(response.version.toString()));
subscriber.next(dto); return dto;
} }
}, err => { })
subscriber.error(err); .pretifyError('Failed to replace asset. Please reload.');
}, () => {
subscriber.complete();
});
});
} }
public putAsset(appName: string, id: string, dto: UpdateAssetDto, version?: Version): Observable<any> { public deleteAsset(appName: string, id: string, version?: Version): Observable<any> {
const url = this.apiUrl.buildUrl(`api/apps/${appName}/assets/${id}`); const url = this.apiUrl.buildUrl(`api/apps/${appName}/assets/${id}`);
return HTTP.putVersioned(this.http, url, dto, version) return HTTP.deleteVersioned(this.http, url, version)
.do(() => {
this.localCache.remove(`asset.${id}`);
})
.pretifyError('Failed to delete asset. Please reload.'); .pretifyError('Failed to delete asset. Please reload.');
} }
public deleteAsset(appName: string, id: string, version?: Version): Observable<any> { public putAsset(appName: string, id: string, dto: UpdateAssetDto, version?: Version): Observable<any> {
const url = this.apiUrl.buildUrl(`api/apps/${appName}/assets/${id}`); const url = this.apiUrl.buildUrl(`api/apps/${appName}/assets/${id}`);
return HTTP.deleteVersioned(this.http, url, version) return HTTP.putVersioned(this.http, url, dto, version)
.pretifyError('Failed to delete asset. Please reload.'); .pretifyError('Failed to delete asset. Please reload.');
} }
} }

20
src/Squidex/app/shared/services/contents.service.ts

@ -182,9 +182,22 @@ export class ContentsService {
const url = this.apiUrl.buildUrl(`/api/content/${appName}/${schemaName}/${id}`); const url = this.apiUrl.buildUrl(`/api/content/${appName}/${schemaName}/${id}`);
return HTTP.putVersioned(this.http, url, dto, version) return HTTP.putVersioned(this.http, url, dto, version)
.do(content => {
this.localCache.set(`content.${content.id}`, content, 5000);
})
.pretifyError('Failed to update content. Please reload.'); .pretifyError('Failed to update content. Please reload.');
} }
public deleteContent(appName: string, schemaName: string, id: string, version?: Version): Observable<any> {
const url = this.apiUrl.buildUrl(`/api/content/${appName}/${schemaName}/${id}`);
return HTTP.deleteVersioned(this.http, url, version)
.do(() => {
this.localCache.remove(`content.${id}`);
})
.pretifyError('Failed to delete content. Please reload.');
}
public publishContent(appName: string, schemaName: string, id: string, version?: Version): Observable<any> { public publishContent(appName: string, schemaName: string, id: string, version?: Version): Observable<any> {
const url = this.apiUrl.buildUrl(`/api/content/${appName}/${schemaName}/${id}/publish`); const url = this.apiUrl.buildUrl(`/api/content/${appName}/${schemaName}/${id}/publish`);
@ -198,11 +211,4 @@ export class ContentsService {
return HTTP.putVersioned(this.http, url, {}, version) return HTTP.putVersioned(this.http, url, {}, version)
.pretifyError('Failed to unpublish content. Please reload.'); .pretifyError('Failed to unpublish content. Please reload.');
} }
public deleteContent(appName: string, schemaName: string, id: string, version?: Version): Observable<any> {
const url = this.apiUrl.buildUrl(`/api/content/${appName}/${schemaName}/${id}`);
return HTTP.deleteVersioned(this.http, url, version)
.pretifyError('Failed to delete content. Please reload.');
}
} }

17
src/Squidex/app/shared/services/schemas.service.ts

@ -733,6 +733,16 @@ export class SchemasService {
.pretifyError('Failed to add field. Please reload.'); .pretifyError('Failed to add field. Please reload.');
} }
public deleteSchema(appName: string, schemaName: string, version?: Version): Observable<any> {
const url = this.apiUrl.buildUrl(`api/apps/${appName}/schemas/${schemaName}`);
return HTTP.deleteVersioned(this.http, url, version)
.do(() => {
this.localCache.remove(`service.${appName}.${schemaName}`);
})
.pretifyError('Failed to delete schema. Please reload.');
}
public putSchema(appName: string, schemaName: string, dto: UpdateSchemaDto, version?: Version): Observable<any> { public putSchema(appName: string, schemaName: string, dto: UpdateSchemaDto, version?: Version): Observable<any> {
const url = this.apiUrl.buildUrl(`api/apps/${appName}/schemas/${schemaName}`); const url = this.apiUrl.buildUrl(`api/apps/${appName}/schemas/${schemaName}`);
@ -802,11 +812,4 @@ export class SchemasService {
return HTTP.deleteVersioned(this.http, url, version) return HTTP.deleteVersioned(this.http, url, version)
.pretifyError('Failed to delete field. Please reload.'); .pretifyError('Failed to delete field. Please reload.');
} }
public deleteSchema(appName: string, schemaName: string, version?: Version): Observable<any> {
const url = this.apiUrl.buildUrl(`api/apps/${appName}/schemas/${schemaName}`);
return HTTP.deleteVersioned(this.http, url, version)
.pretifyError('Failed to delete schema. Please reload.');
}
} }
Loading…
Cancel
Save