edge-ruedelasoif/edge/server/main.js

365 lines
20 KiB
JavaScript

function initConfig(ctx,config) {
var obj = store.get(ctx, "Config",config._id);
if(obj) config.value=obj.value;
var obj = store.upsert(ctx, "Config", config);
return obj;
}
// Fixures
function setFixures() {
var ctx = context.new();
// Migration
var obj = store.get(ctx, "Config", "version");
console.log("Migration");
if(obj) {
console.log(obj);
}
// Config
console.log("Fixtures Config");
var obj = initConfig(ctx, {"_id": "version", "default": "0.0.0","visible":false});
// Card
var obj = initCard(ctx, { _id: "lose10", image: "images/cards/loose10.png", title: "Hey ! t'avais pas un billet de 10 ?", description: "Vous perdez 10€", effect: "-10", sound: "looser" });
var obj = initCard(ctx, { _id: "lose20", image: "images/cards/loose20.png", title: "On t'as vu balancer ton papier dans la rue !", description: "Vous perdez 20€", effect: "-20", sound: "looser" });
var obj = initCard(ctx, { _id: "lose30", image: "images/cards/loose30.png", title: "T'as oublié l'anniversaire de ta mère !", description: "Vous perdez 30€", effect: "-30", sound: "looser" });
var obj = initCard(ctx, { _id: "brokenglass", image: "images/cards/borken-glass.png", title: "T'as deux mains gauches ? Attention les verres !", description: "Tu rembourses un verre cassé, valeur 10€", effect: "-10", sound: "looser" });
var obj = initCard(ctx, { _id: "lownight", image: "images/cards/lownight.png", title: "C'est mort ce soir ! Personne dans le rad !", description: "Tu perds 50€", effect: "-50", sound: "looser" });
var obj = initCard(ctx, { _id: "flood", image: "images/cards/flood.png", title: "Soirée piscine ! Enfin soirée plomberie surtout !", description: "Tu perds 40€", effect: "-40", sound: "looser" });
var obj = initCard(ctx, { _id: "robber", image: "images/cards/robber.png", title: "Il a tapé dans la caisse !", description: "On t'as volé 60€", effect: "-60", sound: "looser" });
var obj = initCard(ctx, { _id: "tomuch", image: "images/cards/tomuch.png", title: "Un p'tit dernier pour la route !", description: "Le verre de trop, amande de 80€", effect: "-80", sound: "looser" });
var obj = initCard(ctx, { _id: "somethingiswrong", image: "images/cards/somethingiswrong.png", title: "Tu ne sais pas rendre la monnaie !", description: "Tu rends 20€ de trop a un client chanceux !", effect: "-20", sound: "looser" });
var obj = initCard(ctx, { _id: "rebuild", image: "images/cards/rebuild.png", title: "On refait la déco !", description: "Rénove ton bar pour la modique somme de 50€", effect: "-50", sound: "looser" });
var obj = initCard(ctx, { _id: "shortage", image: "images/cards/shortage.png", title: "Dévalisé !", description: "Tu t'es fait dévaliser, plus rien en stock", effect: "100", sound: "winner" });
var obj = initCard(ctx, { _id: "luckyday", image: "images/cards/luckyday.png", title: "C'est un billet de 10 non ?", description: "Tu trouves 10€ devant ton bar", effect: "10", sound: "winner" });
var obj = initCard(ctx, { _id: "rushhour", image: "images/cards/rushhour.png", title: "C'est la folie dans ton bar !", description: "Tu gagnes 50€ !", effect: "50", sound: "winner" });
var obj = initCard(ctx, { _id: "blindtest", image: "images/cards/blindtest.png", title: "Tu gagnes la soirée blind test !", description: "Premier prix 20€ !", effect: "20", sound: "winner" });
var obj = initCard(ctx, { _id: "bigtip", image: "images/cards/bigtip.png", title: "Tes clients t'adores !", description: "20€ de pourboire !", effect: "20", sound: "winner" });
var obj = initCard(ctx, { _id: "baroftheweek", image: "images/cards/baroftheweek.png", title: "Tu gagnes le concours du bar de la semaine !", description: "Premier prix 50€ !", effect: "50", sound: "winner" });
var obj = initCard(ctx, { _id: "goodnight", image: "images/cards/goodnight.png", title: "On t'en a trop rendus !", description: "Tu gagnes 30€ !", effect: "30", sound: "winner" });
var obj = initCard(ctx, { _id: "yourdadishere", image: "images/cards/yourdadishere.png", title: "Ton père est là ! Paye une tournée de plus !", description: "Payer 30€ de plus !", effect: "-30", sound: "looser" });
var obj = initCard(ctx, { _id: "dontdrive", image: "images/cards/dontdrive.png", title: "Le ballon a dit non !", description: "Paye un taxi pour rentrer 10€ !", effect: "-10", sound: "looser" });
var obj = initCard(ctx, { _id: "flambeur", image: "images/cards/flambeur.png", title: "Tournée générale !", description: "Paye 60€ !", effect: "-60", sound: "looser" });
var obj = initCard(ctx, { _id: "cuteashell", image: "images/cards/cuteashell.png", title: "Tu es de toute beauté !", description: "On t'offres 40€ !", effect: "40", sound: "winner" });
var obj = initCard(ctx, { _id: "loseitall", image: "images/cards/loseitall.png", title: "Tu as oublié ton portefeuille !", description: "Tu perds 50€ !", effect: "-50", sound: "looser" });
// Tiletype
var obj = initTiletype(ctx, { _id: "bar", description: "bar" });
var obj = initTiletype(ctx, { _id: "meetup", description: "Rencontre" });
var obj = initTiletype(ctx, { _id: "happyHour", description: "Happy Hour" });
var obj = initTiletype(ctx, { _id: "prison", description: "Cellule de dégrisement"});
var obj = initTiletype(ctx, { _id: "start", description: "Week-end"});
// Titlelevel
var obj = initTilelevel(ctx, { _id: "pmu", order: 1, description: "PMU" });
var obj = initTilelevel(ctx, { _id: "bistro", order: 2, description: "Bistro de quartien"});
var obj = initTilelevel(ctx, { _id: "brasserie", order: 3, description: "Brasserie" });
var obj = initTilelevel(ctx, { _id: "barabiere", order: 4, description: "Bar à bières" });
var obj = initTilelevel(ctx, { _id: "baravin", order: 5, description: "Bar à vin" });
var obj = initTilelevel(ctx, { _id: "cocktails", order: 6, description: "Bar a cocktails" });
var obj = initTilelevel(ctx, { _id: "lounge", order: 7, description: "Lounge" });
var obj = initTilelevel(ctx, { _id: "clubprive", order: 8, description: "Club privé" });
// Case
var obj = initTile(ctx, { _id: "st", position: 0, tiletype: "start", size:"big", name: "Week-end", img: "https://static.actu.fr/uploads/2017/05/rue-de-la-soif-Rennes-960x640.jpg" });
var obj = initTile(ctx, { _id: "b1", position: 1, tiletype: "bar", size:"small", name: "Les hirondelles", price: "1", img: "https://media-cdn.tripadvisor.com/media/photo-s/08/99/ef/5a/les-hirondelles.jpg" });
var obj = initTile(ctx, { _id: "b2", position: 2, tiletype: "bar", size:"small", name: "Le cheval blanc", price: "1", img: "https://media-cdn.tripadvisor.com/media/photo-s/14/f4/ed/0f/le-cheval-blanc.jpg" });
var obj = initTile(ctx, { _id: "meetup1", position: 3, tiletype: "meetup", size:"small", name: "Rencontre", img: "https://hoptodate.com/wp-content/uploads/2022/10/Depositphotos_331369428_XL-scaled.jpg" });
var obj = initTile(ctx, { _id: "b3", position: 4, tiletype: "bar", size:"small", name: "L'ABC", price: "2", img: "https://www.pagesjaunes.fr/media/agc/52/85/77/00/00/d1/00/ab/e8/ca/62bc5285770000d100abe8ca/62bc5285770000d100abe8cc.jpg" });
var obj = initTile(ctx, { _id: "b4", position: 5, tiletype: "bar", size:"small", name: "La taverne", price: "2", img: "https://www.clamecyhautnivernais-tourisme.fr/wp-content/uploads/wpetourisme/Bar-La-Taverne-Clamecy----D.Data-900x535.jpg" });
var obj = initTile(ctx, { _id: "hh1", position: 6, tiletype: "happyHour", size:"small", name: "Happy hour", img: "https://blog.laddition.com/sites/default/files/2022-03/sans-titre-17_0.png" });
var obj = initTile(ctx, { _id: "b6", position: 7, tiletype: "bar", size:"small", name: "La fine mousse", price: "3", img: "https://cdn.eat-list.fr/establishment/photo/gallery_photo/75011-paris-11/la-fine-mousse_91615_c4c.jpg" });
var obj = initTile(ctx, { _id: "b7", position: 8, tiletype: "bar", size:"small", name: "Le barboteur", price: "3", img: "https://storage.googleapis.com/statics-wp/sites/lebarboteurlille.com/Le-Barboteur-0-1-1.jpg" });
var obj = initTile(ctx, { _id: "b8", position: 9, tiletype: "bar", size:"small", name: "Le palais de la bière", price: "3", img: "https://www.tourisme-pontaudemer-rislenormande.com/wp-content/uploads/2017/03/Palais-de-la-bi%C3%A8re.jpeg" });
var obj = initTile(ctx, { _id: "meetup2", position: 10, tiletype: "meetup", size:"small", name: "Rencontre", img: "https://www.monpetitdate.fr/wp-content/uploads/2022/01/rencontre-trans-paris.jpg" });
var obj = initTile(ctx, { _id: "b9", position: 11, tiletype: "bar", size:"small", name: "Le comptoir des bières", price: "4", img: "https://lh3.googleusercontent.com/p/AF1QipPRj-YgeXsNxXjkpxill-QMSh20T9jeNl8OLcuj=s1600-w640" });
var obj = initTile(ctx, { _id: "b10", position: 12, tiletype: "bar", size:"small", name: "Les moulins bleus", price: "4", img: "https://www.brunnenbraeu.org/Alben2/MoulinsBleusDijon/album/slides/Les%20Moulins%20Bleus%20%E2%80%93%20Craft%20Beer%20and%20Food%20%281%29.jpg" });
var obj = initTile(ctx, { _id: "b11", position: 13, tiletype: "bar", size:"small", name: "Le fourquet", price: "4", img: "https://media-cdn.tripadvisor.com/media/photo-s/0c/ce/ca/87/le-fourquet.jpg" });
var obj = initTile(ctx, { _id: "prs", position: 14, tiletype: "prison", size:"big", name: "Cellule de dégrisement", sound: "/medias/sound/goat.mp3", img: "https://lvdneng.rosselcdn.net/sites/default/files/dpistyles_v2/ena_16_9_extra_big/2022/09/05/node_1224621/55601340/public/2022/09/05/B9732002324Z.1_20220905182824_000%2BGBHL6LBT5.1-0.jpg?itok=UqmdxUiM1662450019" });
var obj = initTile(ctx, { _id: "b12", position: 15, tiletype: "bar", size:"small", name: "Au beaux fûts", price: "5", img: "https://because-gus.com/wp-content/uploads/2020/02/Bars-MaryRebeccaElliott.jpg" });
var obj = initTile(ctx, { _id: "b13", position: 16, tiletype: "bar", size:"small", name: "Le Bacchus", price: "5", img: "https://media-cdn.tripadvisor.com/media/photo-s/10/f6/a8/75/facade.jpg" });
var obj = initTile(ctx, { _id: "b14", position: 17, tiletype: "bar", size:"small", name: "Matusalém", price: "5", img: "https://foodforthought.com.my/wp-content/uploads/Franks-Bar-Matusalem-Rum-x-Franks-Food-For-Thought-1024x731.jpeg" });
var obj = initTile(ctx, { _id: "meetup3", position: 18, tiletype: "meetup", size:"small", name: "Rencontre", img: "https://test.psychologies.com/var/tests/storage/images/2/3/3/1/11332-2-fre-FR/Test-pret-rencontre_thumb_434_265.jpg" });
var obj = initTile(ctx, { _id: "b15", position: 19, tiletype: "bar", size:"small", name: "Bloody Marianne", price: "6", img: "https://lh3.googleusercontent.com/p/AF1QipPAS0edvVXEiY7_ttg_wBIegJs1Nz2lxIXmqmr3=s1600-w640" });
var obj = initTile(ctx, { _id: "b16", position: 20, tiletype: "bar", size:"small", name: "Shake it up", price: "6", img: "https://images.barrons.com/im-839994?width=700&height=466" });
var obj = initTile(ctx, { _id: "b17", position: 21, tiletype: "bar", size:"small", name: "Le mixologue", price: "6", img: "https://www.ciga.fr/img/cms/le-mixologue/mise-en-situation-le-mixologue.jpg" });
var obj = initTile(ctx, { _id: "hh2", position: 22, tiletype: "happyHour", size:"small", name: "Happy hour", img: "https://img.freepik.com/vecteurs-libre/fond-dessin-anime-happy-hours_52683-81243.jpg" });
var obj = initTile(ctx, { _id: "b18", position: 23, tiletype: "bar", size:"small", name: "Le senateur", price: "7", img: "https://media-cdn.tripadvisor.com/media/photo-s/0f/72/99/b4/montreal-marriott-chateau.jpg" });
var obj = initTile(ctx, { _id: "b19", position: 24, tiletype: "bar", size:"small", name: "La dame blanche", price: "7", img: "https://decibelles-data.media.tourinsoft.eu/upload/dame-jour.jpeg" });
var obj = initTile(ctx, { _id: "meetup4", position: 25, tiletype: "meetup", size:"small", name: "Rencontre", img: "https://www.commeuncamion.com/content/uploads/2015/08/Rencontre-Couple-Bar.jpg" });
var obj = initTile(ctx, { _id: "b20", position: 26, tiletype: "bar", size:"small", name: "Le Kube", price: "8", img: "https://www.lesbarres.com/media/image/slideshow/726a6f8ea266c7c0cbb72cbc261d3520bf8f90df.jpg" });
var obj = initTile(ctx, { _id: "b21", position: 27, tiletype: "bar", size:"small", name: "L'amirauté", price: "8", img: "https://www.lamiraute-restaurant-saintes-maries-de-la-mer.com/media/cache/resolve/l800/websites/b510beeb640a5dc50a78118b3c8f7ce2/img/restaurant-amiraute-saintes-maries-de-la-mer-04_20210927172840.jpg" });
}
// La fonction "onInit()" (si déclarée) est automatiquement
// exécutée au démarrage du serveur de votre application.
function onInit() {
setFixures();
rpc.register("getAuthrole");
rpc.register("getAuthid");
rpc.register("getAuthpseudo");
rpc.register("getAuthisuser"),
rpc.register("getConfigs");
rpc.register("getConfig");
rpc.register("upsertConfig");
rpc.register("getCard");
rpc.register("upsertCard");
rpc.register("initCard");
rpc.register("getTiles");
rpc.register("getTile");
rpc.register("getTilebyorder");
rpc.register("upsertTile");
rpc.register("initTile");
rpc.register("getTiletype");
rpc.register("upsertTiletype");
rpc.register("initTiletype");
rpc.register("getTilelevel");
rpc.register("upsertTilelevel");
rpc.register("initTilelevel");
rpc.register("getPartys");
rpc.register("getPartyswait");
rpc.register("getParty");
rpc.register("upsertParty");
rpc.register("deleteParty");
rpc.register("getPartyplayers");
rpc.register("getPlayer");
rpc.register("initPlayer");
rpc.register("upsertPlayer");
rpc.register("getPlayerParty");
rpc.register("upsertPlayerParty");
rpc.register("getPlayerPartys");
rpc.register("getPlayerPartyTile");
rpc.register("upsertlayerPartyTile");
}
// Repository Auth
async function getAuthrole(ctx,id) {
var obj = await auth.getClaim(ctx, auth.CLAIM_ROLE);
return obj;
}
async function getAuthid(ctx,id) {
var obj = await auth.getClaim(ctx, auth.CLAIM_SUBJECT);
if(!obj) {
obj = await context.get(ctx, context.SESSION_ID);
}
return obj;
}
async function getAuthpseudo(ctx,id) {
var obj = await auth.getClaim(ctx, auth.CLAIM_PREFERRED_USERNAME);
if(!obj) {
obj = await context.get(ctx, context.SESSION_ID);
}
return obj;
}
async function getAuthisuser(ctx,id) {
var obj = await auth.getClaim(ctx, auth.CLAIM_ISSUER);
if(!obj) {
obj = false;
}
return obj;
}
// Repository Config
async function getConfigs(ctx) {
var obj = await store.query(ctx, "Config",{"eq":{ "visible": true }},);
return obj;
}
async function getConfig(ctx,id) {
var obj = await store.get(ctx, "Config",id);
if(obj&&!obj.value) obj.value=obj.default;
return obj;
}
async function upsertConfig(ctx,config) {
var obj = await store.upsert(ctx, "Config", config);
return obj;
}
// Repository Card
async function getCard(ctx,id) {
var obj = await store.get(ctx, "Card",id);
if(obj&&!obj.value) obj.value=obj.default;
return obj;
}
async function upsertCard(ctx,card) {
var obj = await store.upsert(ctx, "Card", config);
return obj;
}
function initCard(ctx,card) {
var obj = store.get(ctx, "Card",card._id);
if(obj) card.value=obj.value;
var obj = store.upsert(ctx, "Card", card);
return obj;
}
// Repository Tile
async function getTiles(ctx) {
var obj = await store.query(ctx, "Tile", {"neq":{ "_id": "" }}, { orderBy: "position" });
return obj;
}
async function getTile(ctx,id) {
var obj = await store.get(ctx, "Tile",id);
if(obj&&!obj.value) obj.value=obj.default;
return obj;
}
async function getTilebyorder(ctx,position) {
var obj = await store.query(ctx, "Tile",{"eq":{ "position": position }},);
return obj[0];
}
async function upsertTile(ctx,tile) {
var obj = await store.upsert(ctx, "Tile", tile);
return obj;
}
function initTile(ctx,tile) {
var obj = store.get(ctx, "Tile",tile._id);
if(obj) tile.value=obj.value;
var obj = store.upsert(ctx, "Tile", tile);
}
// Repository TileType
async function getTiletype(ctx,id) {
var obj = await store.get(ctx, "Tiletype",id);
if(obj&&!obj.value) obj.value=obj.default;
return obj;
}
async function upsertTiletype(ctx,card) {
var obj = await store.upsert(ctx, "Tiletype", config);
return obj;
}
function initTiletype(ctx,tiletype) {
var obj = store.get(ctx, "Tiletype",tiletype._id);
if(obj) tiletype.value=obj.value;
var obj = store.upsert(ctx, "Tiletype", tiletype);
}
// Repository Tilelevel
async function getTilelevel(ctx,id) {
var obj = await store.get(ctx, "Tilelevel",id);
if(obj&&!obj.value) obj.value=obj.default;
return obj;
}
async function upsertTilelevel(ctx,titlelevel) {
var obj = await store.upsert(ctx, "Tilelevel", titlelevel);
return obj;
}
function initTilelevel(ctx,tilelevel) {
var obj = store.get(ctx, "Tilelevel",tilelevel._id);
if(obj) tilelevel.value=obj.value;
var obj = store.upsert(ctx, "Tilelevel", tilelevel);
}
// Repository Party
async function getPartys(ctx) {
var obj = await store.query(ctx, "Party");
return obj;
}
async function getPartyswait(ctx) {
var obj = await store.query(ctx, "Party",{"eq":{ "status": "playerwait" }},);
return obj;
}
async function getParty(ctx,id) {
var obj = await store.get(ctx, "Party",id);
if(obj&&!obj.value) obj.value=obj.default;
return obj;
}
async function upsertParty(ctx,party) {
var obj = await store.upsert(ctx, "Party", party);
return obj;
}
async function deleteParty(ctx,id) {
// Supprimer le media des Partyplayer
var obj = await store.query(ctx, "Player",
{
"eq":{ "partyid": id },
});
obj.forEach(async(player) => {
player.partyid=null;
var obj = await store.upsert(ctx, "Player", player);
});
// Supprimer le media
var obj = await store.delete(ctx, "Party", id);
return obj;
}
async function getPartyplayers(ctx,id) {
var obj = await store.query(ctx, "Player",{"eq":{ "partyid": id }},);
return obj;
}
// Repository Player
async function getPlayer(ctx,id) {
var obj = await store.get(ctx, "Player",id);
if(obj&&!obj.value) obj.value=obj.default;
return obj;
}
async function initPlayer(ctx,player) {
if(!player.isuser) player.name=player.name.replace("Anon ","");
var obj = await store.get(ctx, "Player",player._id);
if(!obj) obj = await store.upsert(ctx, "Player", player);
return obj;
}
async function upsertPlayer(ctx,player) {
var obj = await store.upsert(ctx, "Player", player);
return obj;
}
// Repository PlayerParty
async function getPlayerParty(ctx,ids) {
var obj = await store.query(ctx, "PlayerParty",
{
"and": [
{"eq":{ "playerid": ids.playerid }},
{"eq":{ "partyid": ids.partyid }}
]
}
);
return obj[0];
}
// Repository PlayerPartys
async function getPlayerPartys(ctx,partyid) {
var obj = await store.query(ctx, "PlayerParty",
{"eq":{ "partyid": partyid }}
);
return obj;
}
async function upsertPlayerParty(ctx,playerparty) {
var obj = await store.upsert(ctx, "PlayerParty", playerparty);
return obj;
}
// Repository PlayerPartyCase
async function getPlayerPartyTile(ctx,ids) {
var obj = await store.query(ctx, "PlayerPartyTile",
{
"and": [
{"eq":{ "playerid": ids.playerid }},
{"eq":{ "partyid": ids.partyid }},
{"eq":{ "tileid": ids.tileid }}
]
}
);
return obj[0];
}
async function upsertPlayerPartyCase(ctx,playerpartycase) {
var obj = await store.upsert(ctx, "PlayerPartyCase", playerpartycase);
return obj;
}
// La fonction "onClientMessage(ctx, message)" est automatiquement
// exécutée quand le serveur de votre application reçoit un
// message en provenance du client.
async function onClientMessage(ctx, message) {
await net.broadcast(message);
}