Files
VRCX/src/api/world.js
2025-07-19 12:12:15 +12:00

147 lines
3.8 KiB
JavaScript

import { request } from '../service/request';
import { useWorldStore } from '../stores';
const worldReq = {
/**
* @type {import('../types/api/world').GetWorld}
*/
getWorld(params) {
const worldStore = useWorldStore();
return request(`worlds/${params.worldId}`, {
method: 'GET'
}).then((json) => {
const args = {
json,
params
};
args.ref = worldStore.applyWorld(json);
return args;
});
},
/**
* @param {{worldId: string}} params
* @returns {Promise<{json: any, ref: any, cache?: boolean, params}>}
*/
getCachedWorld(params) {
const worldStore = useWorldStore();
return new Promise((resolve, reject) => {
const ref = worldStore.cachedWorlds.get(params.worldId);
if (typeof ref === 'undefined') {
worldReq
.getWorld(params)
.catch(reject)
.then((args) => {
args.ref = worldStore.applyWorld(args.json);
resolve(args);
});
} else {
resolve({
cache: true,
json: ref,
params,
ref
});
}
});
},
/**
* @type {import('../types/api/world').GetWorlds}
*/
getWorlds(params, option) {
const worldStore = useWorldStore();
let endpoint = 'worlds';
if (typeof option !== 'undefined') {
endpoint = `worlds/${option}`;
}
return request(endpoint, {
method: 'GET',
params
}).then((json) => {
const args = {
json,
params,
option
};
for (const json of args.json) {
worldStore.applyWorld(json);
}
return args;
});
},
/**
* @param {{worldId: string}} params
* @returns {Promise<{json: any, params}>}
*/
deleteWorld(params) {
return request(`worlds/${params.worldId}`, {
method: 'DELETE'
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @type {import('../types/api/world').SaveWorld}
*/
saveWorld(params) {
const worldStore = useWorldStore();
return request(`worlds/${params.id}`, {
method: 'PUT',
params
}).then((json) => {
const args = {
json,
params
};
args.ref = worldStore.applyWorld(json);
return args;
});
},
/**
* @param {{worldId: string}} params
* @returns {Promise<{json: any, params}>}
*/
publishWorld(params) {
const worldStore = useWorldStore();
return request(`worlds/${params.worldId}/publish`, {
method: 'PUT',
params
}).then((json) => {
const args = {
json,
params
};
args.ref = worldStore.applyWorld(json);
return args;
});
},
/**
* @param {{worldId: string}} params
* @returns {Promise<{json: any, params}>}
*/
unpublishWorld(params) {
const worldStore = useWorldStore();
return request(`worlds/${params.worldId}/publish`, {
method: 'DELETE',
params
}).then((json) => {
const args = {
json,
params
};
args.ref = worldStore.applyWorld(json);
return args;
});
}
};
export default worldReq;