|
|
|
@ -1,6 +1,6 @@ |
|
|
|
|
import { AlbumWithRefs, AlbumWithRefsWithId, ArtistWithRefs, ArtistWithRefsWithId, TagWithRefs, TagWithRefsWithId, TrackWithRefs, TrackWithRefsWithId } from "../../../client/src/api/api"; |
|
|
|
|
import { userEndpoints } from "../../endpoints/User"; |
|
|
|
|
import { createAlbum, createArtist, createTag, createTrack, deleteTrack, ReferenceDatabase } from "./DBReferenceModel"; |
|
|
|
|
import { createAlbum, createArtist, createTag, createTrack, deleteAlbum, deleteArtist, deleteTag, deleteTrack, ReferenceDatabase } from "./DBReferenceModel"; |
|
|
|
|
import * as helpers from '../integration/helpers'; |
|
|
|
|
import { DBErrorKind, isDBError } from "../../endpoints/types"; |
|
|
|
|
|
|
|
|
@ -10,6 +10,9 @@ export enum DBActionType { |
|
|
|
|
CreateTag = "CreateTag", |
|
|
|
|
CreateArtist = "CreateArtist", |
|
|
|
|
DeleteTrack = "DeleteTrack", |
|
|
|
|
DeleteAlbum = "DeleteAlbum", |
|
|
|
|
DeleteArtist = "DeleteArtist", |
|
|
|
|
DeleteTag = "DeleteTag", |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
export interface DBAction { |
|
|
|
@ -27,7 +30,10 @@ export interface RandomDBActionDistribution { |
|
|
|
|
createAlbumParams: RandomCreateAlbumDistribution, |
|
|
|
|
createArtistParams: RandomCreateArtistDistribution, |
|
|
|
|
createTagParams: RandomCreateTagDistribution, |
|
|
|
|
deleteTrackParams: RandomDeleteTrackDistribution, |
|
|
|
|
deleteTrackParams: RandomDeleteObjectDistribution, |
|
|
|
|
deleteArtistParams: RandomDeleteObjectDistribution, |
|
|
|
|
deleteAlbumParams: RandomDeleteObjectDistribution, |
|
|
|
|
deleteTagParams: RandomDeleteObjectDistribution, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
export interface RandomCreateTrackDistribution { |
|
|
|
@ -76,8 +82,8 @@ export interface RandomCreateTagDistribution { |
|
|
|
|
linkParent: Distribution<boolean | 'nonexistent'>, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
export interface RandomDeleteTrackDistribution { |
|
|
|
|
validTrack: Distribution<boolean>, |
|
|
|
|
export interface RandomDeleteObjectDistribution { |
|
|
|
|
validId: Distribution<boolean>, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
export function applyDistribution<T>( |
|
|
|
@ -132,32 +138,37 @@ export function applyReferenceDBAction( |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
switch (action.type) { |
|
|
|
|
case DBActionType.CreateTrack: { |
|
|
|
|
response = createTrack(action.userId, action.payload, db); |
|
|
|
|
status = 200; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case DBActionType.CreateAlbum: { |
|
|
|
|
response = createAlbum(action.userId, action.payload, db); |
|
|
|
|
status = 200; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case DBActionType.CreateArtist: { |
|
|
|
|
response = createArtist(action.userId, action.payload, db); |
|
|
|
|
status = 200; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case DBActionType.CreateTag: { |
|
|
|
|
response = createTag(action.userId, action.payload, db); |
|
|
|
|
status = 200; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case DBActionType.DeleteTrack: { |
|
|
|
|
deleteTrack(action.userId, action.payload, db); |
|
|
|
|
response = {}; |
|
|
|
|
status = 200; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case DBActionType.CreateTrack: |
|
|
|
|
case DBActionType.CreateAlbum: |
|
|
|
|
case DBActionType.CreateArtist: |
|
|
|
|
case DBActionType.CreateTag: |
|
|
|
|
{ |
|
|
|
|
let funcs = { |
|
|
|
|
[DBActionType.CreateTrack]: createTrack, |
|
|
|
|
[DBActionType.CreateAlbum]: createAlbum, |
|
|
|
|
[DBActionType.CreateArtist]: createArtist, |
|
|
|
|
[DBActionType.CreateTag]: createTag, |
|
|
|
|
} |
|
|
|
|
response = funcs[action.type](action.userId, action.payload, db); |
|
|
|
|
status = 200; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case DBActionType.DeleteTrack: |
|
|
|
|
case DBActionType.DeleteAlbum: |
|
|
|
|
case DBActionType.DeleteArtist: |
|
|
|
|
case DBActionType.DeleteTag: |
|
|
|
|
{ |
|
|
|
|
let funcs = { |
|
|
|
|
[DBActionType.DeleteTrack]: deleteTrack, |
|
|
|
|
[DBActionType.DeleteAlbum]: deleteAlbum, |
|
|
|
|
[DBActionType.DeleteArtist]: deleteArtist, |
|
|
|
|
[DBActionType.DeleteTag]: deleteTag, |
|
|
|
|
} |
|
|
|
|
funcs[action.type](action.userId, action.payload, db); |
|
|
|
|
response = {}; |
|
|
|
|
status = 200; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} catch (e) { |
|
|
|
|
if (isDBError(e)) { |
|
|
|
@ -184,36 +195,39 @@ export async function applyRealDBAction( |
|
|
|
|
let status: number = 0; |
|
|
|
|
|
|
|
|
|
switch (action.type) { |
|
|
|
|
case DBActionType.CreateTrack: { |
|
|
|
|
let res = await helpers.createTrack(req, action.payload); |
|
|
|
|
status = res.status; |
|
|
|
|
response = res.body; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case DBActionType.CreateAlbum: { |
|
|
|
|
let res = await helpers.createAlbum(req, action.payload); |
|
|
|
|
status = res.status; |
|
|
|
|
response = res.body; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case DBActionType.CreateArtist: { |
|
|
|
|
let res = await helpers.createArtist(req, action.payload); |
|
|
|
|
status = res.status; |
|
|
|
|
response = res.body; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case DBActionType.CreateTag: { |
|
|
|
|
let res = await helpers.createTag(req, action.payload); |
|
|
|
|
status = res.status; |
|
|
|
|
response = res.body; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case DBActionType.DeleteTrack: { |
|
|
|
|
let res = await helpers.deleteTrack(req, action.payload); |
|
|
|
|
status = res.status; |
|
|
|
|
response = res.body; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case DBActionType.CreateTrack: |
|
|
|
|
case DBActionType.CreateAlbum: |
|
|
|
|
case DBActionType.CreateArtist: |
|
|
|
|
case DBActionType.CreateTag: |
|
|
|
|
{ |
|
|
|
|
let funcs = { |
|
|
|
|
[DBActionType.CreateTrack]: helpers.createTrack, |
|
|
|
|
[DBActionType.CreateAlbum]: helpers.createAlbum, |
|
|
|
|
[DBActionType.CreateArtist]: helpers.createArtist, |
|
|
|
|
[DBActionType.CreateTag]: helpers.createTag, |
|
|
|
|
} |
|
|
|
|
let res = await funcs[action.type](req, action.payload); |
|
|
|
|
status = res.status; |
|
|
|
|
response = res.body; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
case DBActionType.DeleteTrack: |
|
|
|
|
case DBActionType.DeleteAlbum: |
|
|
|
|
case DBActionType.DeleteArtist: |
|
|
|
|
case DBActionType.DeleteTag: |
|
|
|
|
{ |
|
|
|
|
let funcs = { |
|
|
|
|
[DBActionType.DeleteTrack]: helpers.deleteTrack, |
|
|
|
|
[DBActionType.DeleteAlbum]: helpers.deleteAlbum, |
|
|
|
|
[DBActionType.DeleteArtist]: helpers.deleteArtist, |
|
|
|
|
[DBActionType.DeleteTag]: helpers.deleteTag, |
|
|
|
|
} |
|
|
|
|
let res = await funcs[action.type](req, action.payload); |
|
|
|
|
status = res.status; |
|
|
|
|
response = res.body; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return { response: response, status: status }; |
|
|
|
@ -234,60 +248,55 @@ export function randomDBAction( |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
switch (type) { |
|
|
|
|
case DBActionType.CreateTrack: { |
|
|
|
|
return { |
|
|
|
|
type: type, |
|
|
|
|
payload: createRandomTrack( |
|
|
|
|
db, |
|
|
|
|
userId, |
|
|
|
|
distribution.createTrackParams, |
|
|
|
|
randomNumGen |
|
|
|
|
), |
|
|
|
|
userId: userId, |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
case DBActionType.CreateArtist: { |
|
|
|
|
return { |
|
|
|
|
type: type, |
|
|
|
|
payload: createRandomArtist( |
|
|
|
|
db, |
|
|
|
|
userId, |
|
|
|
|
distribution.createArtistParams, |
|
|
|
|
randomNumGen |
|
|
|
|
), |
|
|
|
|
userId: userId, |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
case DBActionType.CreateAlbum: { |
|
|
|
|
return { |
|
|
|
|
type: type, |
|
|
|
|
payload: createRandomAlbum( |
|
|
|
|
db, |
|
|
|
|
userId, |
|
|
|
|
distribution.createAlbumParams, |
|
|
|
|
randomNumGen |
|
|
|
|
), |
|
|
|
|
userId: userId, |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
case DBActionType.CreateTag: { |
|
|
|
|
return { |
|
|
|
|
type: type, |
|
|
|
|
payload: createRandomTag( |
|
|
|
|
db, |
|
|
|
|
userId, |
|
|
|
|
distribution.createTagParams, |
|
|
|
|
randomNumGen |
|
|
|
|
), |
|
|
|
|
userId: userId, |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
case DBActionType.DeleteTrack: { |
|
|
|
|
case DBActionType.CreateTrack: |
|
|
|
|
case DBActionType.CreateArtist: |
|
|
|
|
case DBActionType.CreateAlbum: |
|
|
|
|
case DBActionType.CreateTag: |
|
|
|
|
{ |
|
|
|
|
let funcs = { |
|
|
|
|
[DBActionType.CreateTrack]: createRandomTrack, |
|
|
|
|
[DBActionType.CreateArtist]: createRandomArtist, |
|
|
|
|
[DBActionType.CreateAlbum]: createRandomAlbum, |
|
|
|
|
[DBActionType.CreateTag]: createRandomTag, |
|
|
|
|
} |
|
|
|
|
let params = { |
|
|
|
|
[DBActionType.CreateTrack]: distribution.createTrackParams, |
|
|
|
|
[DBActionType.CreateArtist]: distribution.createArtistParams, |
|
|
|
|
[DBActionType.CreateAlbum]: distribution.createAlbumParams, |
|
|
|
|
[DBActionType.CreateTag]: distribution.createTagParams, |
|
|
|
|
} |
|
|
|
|
return { |
|
|
|
|
type: type, |
|
|
|
|
payload: funcs[type]( |
|
|
|
|
db, |
|
|
|
|
userId, |
|
|
|
|
params[type] as any, |
|
|
|
|
randomNumGen |
|
|
|
|
), |
|
|
|
|
userId: userId, |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
case DBActionType.DeleteTrack: |
|
|
|
|
case DBActionType.DeleteArtist: |
|
|
|
|
case DBActionType.DeleteAlbum: |
|
|
|
|
case DBActionType.DeleteTag: { |
|
|
|
|
let params = { |
|
|
|
|
[DBActionType.DeleteTrack]: distribution.deleteTrackParams, |
|
|
|
|
[DBActionType.DeleteArtist]: distribution.deleteArtistParams, |
|
|
|
|
[DBActionType.DeleteAlbum]: distribution.deleteAlbumParams, |
|
|
|
|
[DBActionType.DeleteTag]: distribution.deleteTagParams, |
|
|
|
|
} |
|
|
|
|
let objectArrays = { |
|
|
|
|
[DBActionType.DeleteTrack]: db[userId].tracks, |
|
|
|
|
[DBActionType.DeleteArtist]: db[userId].artists, |
|
|
|
|
[DBActionType.DeleteAlbum]: db[userId].albums, |
|
|
|
|
[DBActionType.DeleteTag]: db[userId].tags, |
|
|
|
|
} |
|
|
|
|
return { |
|
|
|
|
type: type, |
|
|
|
|
payload: applyDistribution(distribution.deleteTrackParams.validTrack, randomNumGen) ? |
|
|
|
|
Math.floor(randomNumGen() * db[userId].tracks.length) + 1 : |
|
|
|
|
Math.floor(randomNumGen() * db[userId].tracks.length) + 1 + db[userId].tracks.length, |
|
|
|
|
payload: applyDistribution(params[type].validId, randomNumGen) ? |
|
|
|
|
Math.floor(randomNumGen() * objectArrays[type].length) + 1 : |
|
|
|
|
Math.floor(randomNumGen() * objectArrays[type].length) + 1 + objectArrays[type].length, |
|
|
|
|
userId: userId, |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|