1
0
forked from noxious/server

More cache stuff

This commit is contained in:
Dennis Postma 2025-01-07 22:20:27 +01:00
parent 010454914b
commit 39ec4daa06
12 changed files with 222 additions and 166 deletions

166
package-lock.json generated
View File

@ -1360,9 +1360,9 @@
} }
}, },
"node_modules/@prisma/client": { "node_modules/@prisma/client": {
"version": "6.1.0", "version": "6.2.0",
"resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.1.0.tgz", "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.2.0.tgz",
"integrity": "sha512-AbQYc5+EJKm1Ydfq3KxwcGiy7wIbm4/QbjCKWWoNROtvy7d6a3gmAGkKjK0iUCzh+rHV8xDhD5Cge8ke/kiy5Q==", "integrity": "sha512-tmEgej4OR+Wqk8MwZQcu58JzA1iFPmi/z7VPEmjTuTIQDLqHQZ6+MDRLL4wgNJXJkMHUKD9yMD5AkwYH0/0hKA==",
"hasInstallScript": true, "hasInstallScript": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"engines": { "engines": {
@ -1378,53 +1378,53 @@
} }
}, },
"node_modules/@prisma/debug": { "node_modules/@prisma/debug": {
"version": "6.1.0", "version": "6.2.0",
"resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.1.0.tgz", "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.2.0.tgz",
"integrity": "sha512-0himsvcM4DGBTtvXkd2Tggv6sl2JyUYLzEGXXleFY+7Kp6rZeSS3hiTW9mwtUlXrwYbJP6pwlVNB7jYElrjWUg==", "integrity": "sha512-Q96rqZVivmEtt29h1hhALceJTqggHDsr3RAWpeSJZOppQu6vcv5PyiY4XxyTf04gZw4Ue+kkqtaRcRms1zC8aQ==",
"devOptional": true, "devOptional": true,
"license": "Apache-2.0" "license": "Apache-2.0"
}, },
"node_modules/@prisma/engines": { "node_modules/@prisma/engines": {
"version": "6.1.0", "version": "6.2.0",
"resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.1.0.tgz", "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.2.0.tgz",
"integrity": "sha512-GnYJbCiep3Vyr1P/415ReYrgJUjP79fBNc1wCo7NP6Eia0CzL2Ot9vK7Infczv3oK7JLrCcawOSAxFxNFsAERQ==", "integrity": "sha512-Od7fH2gH+4n0E/XIhhAfO3OaKKNRzD0s1LY8umyvDQXlFmiDYF8kNJydcfWLvU3XNNV40wM2T0jOU+4ua1Zp3A==",
"devOptional": true, "devOptional": true,
"hasInstallScript": true, "hasInstallScript": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@prisma/debug": "6.1.0", "@prisma/debug": "6.2.0",
"@prisma/engines-version": "6.1.0-21.11f085a2012c0f4778414c8db2651556ee0ef959", "@prisma/engines-version": "6.2.0-14.4123509d24aa4dede1e864b46351bf2790323b69",
"@prisma/fetch-engine": "6.1.0", "@prisma/fetch-engine": "6.2.0",
"@prisma/get-platform": "6.1.0" "@prisma/get-platform": "6.2.0"
} }
}, },
"node_modules/@prisma/engines-version": { "node_modules/@prisma/engines-version": {
"version": "6.1.0-21.11f085a2012c0f4778414c8db2651556ee0ef959", "version": "6.2.0-14.4123509d24aa4dede1e864b46351bf2790323b69",
"resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.1.0-21.11f085a2012c0f4778414c8db2651556ee0ef959.tgz", "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.2.0-14.4123509d24aa4dede1e864b46351bf2790323b69.tgz",
"integrity": "sha512-PdJqmYM2Fd8K0weOOtQThWylwjsDlTig+8Pcg47/jszMuLL9iLIaygC3cjWJLda69siRW4STlCTMSgOjZzvKPQ==", "integrity": "sha512-7tw1qs/9GWSX6qbZs4He09TOTg1ff3gYsB3ubaVNN0Pp1zLm9NC5C5MZShtkz7TyQjx7blhpknB7HwEhlG+PrQ==",
"devOptional": true, "devOptional": true,
"license": "Apache-2.0" "license": "Apache-2.0"
}, },
"node_modules/@prisma/fetch-engine": { "node_modules/@prisma/fetch-engine": {
"version": "6.1.0", "version": "6.2.0",
"resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.1.0.tgz", "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.2.0.tgz",
"integrity": "sha512-asdFi7TvPlEZ8CzSZ/+Du5wZ27q6OJbRSXh+S8ISZguu+S9KtS/gP7NeXceZyb1Jv1SM1S5YfiCv+STDsG6rrg==", "integrity": "sha512-zz0HmZ2Npsthnh+1cj7aFPRWs57GS4CNlM9uXpVeQm2/YN0LMRNeuI5/zpqRhHrZUXdKde0jltJnvIM1Xz/mPQ==",
"devOptional": true, "devOptional": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@prisma/debug": "6.1.0", "@prisma/debug": "6.2.0",
"@prisma/engines-version": "6.1.0-21.11f085a2012c0f4778414c8db2651556ee0ef959", "@prisma/engines-version": "6.2.0-14.4123509d24aa4dede1e864b46351bf2790323b69",
"@prisma/get-platform": "6.1.0" "@prisma/get-platform": "6.2.0"
} }
}, },
"node_modules/@prisma/get-platform": { "node_modules/@prisma/get-platform": {
"version": "6.1.0", "version": "6.2.0",
"resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.1.0.tgz", "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.2.0.tgz",
"integrity": "sha512-ia8bNjboBoHkmKGGaWtqtlgQOhCi7+f85aOkPJKgNwWvYrT6l78KgojLekE8zMhVk0R9lWcifV0Pf8l3/15V0Q==", "integrity": "sha512-Nnk2fcjiRB9E0uRKCMl+EmBC1Vs6kXqaHa2E108pDrEXAgxj0Ns/YQSeZE0o4QJiK5m1PGmImA9/FFUAgCUTHA==",
"devOptional": true, "devOptional": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@prisma/debug": "6.1.0" "@prisma/debug": "6.2.0"
} }
}, },
"node_modules/@rtsao/scc": { "node_modules/@rtsao/scc": {
@ -1840,21 +1840,21 @@
} }
}, },
"node_modules/@typescript-eslint/eslint-plugin": { "node_modules/@typescript-eslint/eslint-plugin": {
"version": "8.19.0", "version": "8.19.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.19.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.19.1.tgz",
"integrity": "sha512-NggSaEZCdSrFddbctrVjkVZvFC6KGfKfNK0CU7mNK/iKHGKbzT4Wmgm08dKpcZECBu9f5FypndoMyRHkdqfT1Q==", "integrity": "sha512-tJzcVyvvb9h/PB96g30MpxACd9IrunT7GF9wfA9/0TJ1LxGOJx1TdPzSbBBnNED7K9Ka8ybJsnEpiXPktolTLg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@eslint-community/regexpp": "^4.10.0", "@eslint-community/regexpp": "^4.10.0",
"@typescript-eslint/scope-manager": "8.19.0", "@typescript-eslint/scope-manager": "8.19.1",
"@typescript-eslint/type-utils": "8.19.0", "@typescript-eslint/type-utils": "8.19.1",
"@typescript-eslint/utils": "8.19.0", "@typescript-eslint/utils": "8.19.1",
"@typescript-eslint/visitor-keys": "8.19.0", "@typescript-eslint/visitor-keys": "8.19.1",
"graphemer": "^1.4.0", "graphemer": "^1.4.0",
"ignore": "^5.3.1", "ignore": "^5.3.1",
"natural-compare": "^1.4.0", "natural-compare": "^1.4.0",
"ts-api-utils": "^1.3.0" "ts-api-utils": "^2.0.0"
}, },
"engines": { "engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0" "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -1870,16 +1870,16 @@
} }
}, },
"node_modules/@typescript-eslint/parser": { "node_modules/@typescript-eslint/parser": {
"version": "8.19.0", "version": "8.19.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.19.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.19.1.tgz",
"integrity": "sha512-6M8taKyOETY1TKHp0x8ndycipTVgmp4xtg5QpEZzXxDhNvvHOJi5rLRkLr8SK3jTgD5l4fTlvBiRdfsuWydxBw==", "integrity": "sha512-67gbfv8rAwawjYx3fYArwldTQKoYfezNUT4D5ioWetr/xCrxXxvleo3uuiFuKfejipvq+og7mjz3b0G2bVyUCw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/scope-manager": "8.19.0", "@typescript-eslint/scope-manager": "8.19.1",
"@typescript-eslint/types": "8.19.0", "@typescript-eslint/types": "8.19.1",
"@typescript-eslint/typescript-estree": "8.19.0", "@typescript-eslint/typescript-estree": "8.19.1",
"@typescript-eslint/visitor-keys": "8.19.0", "@typescript-eslint/visitor-keys": "8.19.1",
"debug": "^4.3.4" "debug": "^4.3.4"
}, },
"engines": { "engines": {
@ -1895,14 +1895,14 @@
} }
}, },
"node_modules/@typescript-eslint/scope-manager": { "node_modules/@typescript-eslint/scope-manager": {
"version": "8.19.0", "version": "8.19.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.19.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.19.1.tgz",
"integrity": "sha512-hkoJiKQS3GQ13TSMEiuNmSCvhz7ujyqD1x3ShbaETATHrck+9RaDdUbt+osXaUuns9OFwrDTTrjtwsU8gJyyRA==", "integrity": "sha512-60L9KIuN/xgmsINzonOcMDSB8p82h95hoBfSBtXuO4jlR1R9L1xSkmVZKgCPVfavDlXihh4ARNjXhh1gGnLC7Q==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/types": "8.19.0", "@typescript-eslint/types": "8.19.1",
"@typescript-eslint/visitor-keys": "8.19.0" "@typescript-eslint/visitor-keys": "8.19.1"
}, },
"engines": { "engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0" "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -1913,16 +1913,16 @@
} }
}, },
"node_modules/@typescript-eslint/type-utils": { "node_modules/@typescript-eslint/type-utils": {
"version": "8.19.0", "version": "8.19.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.19.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.19.1.tgz",
"integrity": "sha512-TZs0I0OSbd5Aza4qAMpp1cdCYVnER94IziudE3JU328YUHgWu9gwiwhag+fuLeJ2LkWLXI+F/182TbG+JaBdTg==", "integrity": "sha512-Rp7k9lhDKBMRJB/nM9Ksp1zs4796wVNyihG9/TU9R6KCJDNkQbc2EOKjrBtLYh3396ZdpXLtr/MkaSEmNMtykw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/typescript-estree": "8.19.0", "@typescript-eslint/typescript-estree": "8.19.1",
"@typescript-eslint/utils": "8.19.0", "@typescript-eslint/utils": "8.19.1",
"debug": "^4.3.4", "debug": "^4.3.4",
"ts-api-utils": "^1.3.0" "ts-api-utils": "^2.0.0"
}, },
"engines": { "engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0" "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -1937,9 +1937,9 @@
} }
}, },
"node_modules/@typescript-eslint/types": { "node_modules/@typescript-eslint/types": {
"version": "8.19.0", "version": "8.19.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.19.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.19.1.tgz",
"integrity": "sha512-8XQ4Ss7G9WX8oaYvD4OOLCjIQYgRQxO+qCiR2V2s2GxI9AUpo7riNwo6jDhKtTcaJjT8PY54j2Yb33kWtSJsmA==", "integrity": "sha512-JBVHMLj7B1K1v1051ZaMMgLW4Q/jre5qGK0Ew6UgXz1Rqh+/xPzV1aW581OM00X6iOfyr1be+QyW8LOUf19BbA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
@ -1951,20 +1951,20 @@
} }
}, },
"node_modules/@typescript-eslint/typescript-estree": { "node_modules/@typescript-eslint/typescript-estree": {
"version": "8.19.0", "version": "8.19.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.19.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.19.1.tgz",
"integrity": "sha512-WW9PpDaLIFW9LCbucMSdYUuGeFUz1OkWYS/5fwZwTA+l2RwlWFdJvReQqMUMBw4yJWJOfqd7An9uwut2Oj8sLw==", "integrity": "sha512-jk/TZwSMJlxlNnqhy0Eod1PNEvCkpY6MXOXE/WLlblZ6ibb32i2We4uByoKPv1d0OD2xebDv4hbs3fm11SMw8Q==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/types": "8.19.0", "@typescript-eslint/types": "8.19.1",
"@typescript-eslint/visitor-keys": "8.19.0", "@typescript-eslint/visitor-keys": "8.19.1",
"debug": "^4.3.4", "debug": "^4.3.4",
"fast-glob": "^3.3.2", "fast-glob": "^3.3.2",
"is-glob": "^4.0.3", "is-glob": "^4.0.3",
"minimatch": "^9.0.4", "minimatch": "^9.0.4",
"semver": "^7.6.0", "semver": "^7.6.0",
"ts-api-utils": "^1.3.0" "ts-api-utils": "^2.0.0"
}, },
"engines": { "engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0" "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -1978,16 +1978,16 @@
} }
}, },
"node_modules/@typescript-eslint/utils": { "node_modules/@typescript-eslint/utils": {
"version": "8.19.0", "version": "8.19.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.19.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.19.1.tgz",
"integrity": "sha512-PTBG+0oEMPH9jCZlfg07LCB2nYI0I317yyvXGfxnvGvw4SHIOuRnQ3kadyyXY6tGdChusIHIbM5zfIbp4M6tCg==", "integrity": "sha512-IxG5gLO0Ne+KaUc8iW1A+XuKLd63o4wlbI1Zp692n1xojCl/THvgIKXJXBZixTh5dd5+yTJ/VXH7GJaaw21qXA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.4.0", "@eslint-community/eslint-utils": "^4.4.0",
"@typescript-eslint/scope-manager": "8.19.0", "@typescript-eslint/scope-manager": "8.19.1",
"@typescript-eslint/types": "8.19.0", "@typescript-eslint/types": "8.19.1",
"@typescript-eslint/typescript-estree": "8.19.0" "@typescript-eslint/typescript-estree": "8.19.1"
}, },
"engines": { "engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0" "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -2002,13 +2002,13 @@
} }
}, },
"node_modules/@typescript-eslint/visitor-keys": { "node_modules/@typescript-eslint/visitor-keys": {
"version": "8.19.0", "version": "8.19.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.19.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.19.1.tgz",
"integrity": "sha512-mCFtBbFBJDCNCWUl5y6sZSCHXw1DEFEk3c/M3nRK2a4XUB8StGFtmcEMizdjKuBzB6e/smJAAWYug3VrdLMr1w==", "integrity": "sha512-fzmjU8CHK853V/avYZAvuVut3ZTfwN5YtMaoi+X9Y9MA9keaWNHC3zEQ9zvyX/7Hj+5JkNyK1l7TOR2hevHB6Q==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/types": "8.19.0", "@typescript-eslint/types": "8.19.1",
"eslint-visitor-keys": "^4.2.0" "eslint-visitor-keys": "^4.2.0"
}, },
"engines": { "engines": {
@ -2457,9 +2457,9 @@
"license": "BSD-3-Clause" "license": "BSD-3-Clause"
}, },
"node_modules/bullmq": { "node_modules/bullmq": {
"version": "5.34.6", "version": "5.34.7",
"resolved": "https://registry.npmjs.org/bullmq/-/bullmq-5.34.6.tgz", "resolved": "https://registry.npmjs.org/bullmq/-/bullmq-5.34.7.tgz",
"integrity": "sha512-pRCYyO9RlkQWxdmKlrNnUthyFwurYXRYLVXD1YIx+nCCdhAOiHatD8FDHbsT/w2I31c0NWoMcfZiIGuipiF7Lg==", "integrity": "sha512-Z6nKi8skD9n5/ErddTngeeEd8dRvZCu8wgZqpeH9zK0DlyTxYKceTnkGab3FkA+U9mzlqa0z34ZKGMbn4GWdgQ==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"cron-parser": "^4.9.0", "cron-parser": "^4.9.0",
@ -5992,14 +5992,14 @@
} }
}, },
"node_modules/prisma": { "node_modules/prisma": {
"version": "6.1.0", "version": "6.2.0",
"resolved": "https://registry.npmjs.org/prisma/-/prisma-6.1.0.tgz", "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.2.0.tgz",
"integrity": "sha512-aFI3Yi+ApUxkwCJJwyQSwpyzUX7YX3ihzuHNHOyv4GJg3X5tQsmRaJEnZ+ZyfHpMtnyahhmXVfbTZ+lS8ZtfKw==", "integrity": "sha512-3bnAPqtWXbyA9QEKYEstPcsQMxoQ97rjC0E1OZ+QVKuNNpzRDdIgdCpTVpHvqj/9UaWpqaEiENYqS2At8DtESA==",
"devOptional": true, "devOptional": true,
"hasInstallScript": true, "hasInstallScript": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@prisma/engines": "6.1.0" "@prisma/engines": "6.2.0"
}, },
"bin": { "bin": {
"prisma": "build/index.js" "prisma": "build/index.js"
@ -7090,16 +7090,16 @@
} }
}, },
"node_modules/ts-api-utils": { "node_modules/ts-api-utils": {
"version": "1.4.3", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz",
"integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=16" "node": ">=18.12"
}, },
"peerDependencies": { "peerDependencies": {
"typescript": ">=4.2.0" "typescript": ">=4.8.4"
} }
}, },
"node_modules/ts-morph": { "node_modules/ts-morph": {

View File

@ -2,57 +2,10 @@ import { Request, Response } from 'express'
import { BaseController } from '#application/base/baseController' import { BaseController } from '#application/base/baseController'
import { AssetData, UUID } from '#application/types' import { AssetData, UUID } from '#application/types'
import MapRepository from '#repositories/mapRepository'
import SpriteRepository from '#repositories/spriteRepository' import SpriteRepository from '#repositories/spriteRepository'
import TileRepository from '#repositories/tileRepository'
export class AssetsController extends BaseController { export class AssetsController extends BaseController {
private readonly mapRepository = new MapRepository()
private readonly spriteRepository = new SpriteRepository() private readonly spriteRepository = new SpriteRepository()
private readonly tileRepository = new TileRepository()
/**
* List tiles
* @param req
* @param res
*/
public async listTiles(req: Request, res: Response) {
const assets: AssetData[] = []
const tiles = await this.tileRepository.getAll()
for (const tile of tiles) {
assets.push({ key: tile.getId(), data: '/textures/tiles/' + tile.getId() + '.png', group: 'tiles', updatedAt: tile.getUpdatedAt() } as AssetData)
}
return this.sendSuccess(res, assets)
}
/**
* List tiles by map
* @param req
* @param res
*/
public async listTilesByMap(req: Request, res: Response) {
const mapId = req.params.mapId as UUID
if (!mapId) {
return this.sendError(res, 'Invalid map ID', 400)
}
const map = await this.mapRepository.getById(mapId)
if (!map) {
return this.sendError(res, 'Map not found', 404)
}
const assets: AssetData[] = []
const tiles = await this.tileRepository.getByMapId(mapId)
for (const tile of tiles) {
assets.push({ key: tile.getId(), data: '/textures/tiles/' + tile.getId() + '.png', group: 'tiles', updatedAt: tile.getUpdatedAt() } as AssetData)
}
return this.sendSuccess(res, assets)
}
/** /**
* List sprite actions * List sprite actions

View File

@ -5,8 +5,28 @@ import MapObjectRepository from '#repositories/mapObjectRepository'
import MapRepository from '#repositories/mapRepository' import MapRepository from '#repositories/mapRepository'
import SpriteRepository from '#repositories/spriteRepository' import SpriteRepository from '#repositories/spriteRepository'
import TileRepository from '#repositories/tileRepository' import TileRepository from '#repositories/tileRepository'
import CharacterHairRepository from '#repositories/characterHairRepository'
import CharacterTypeRepository from '#repositories/characterTypeRepository'
export class CacheController extends BaseController { export class CacheController extends BaseController {
/**
* Serve a list of tiles and send as JSON
* @param req
* @param res
*/
public async tiles(req: Request, res: Response) {
const items: any[] = []
const tileRepository = new TileRepository()
const tiles = await tileRepository.getAll()
for (const tile of tiles) {
items.push(await tile.cache())
}
return this.sendSuccess(res, items)
}
/** /**
* Serve a list of maps and send as JSON * Serve a list of maps and send as JSON
* @param req * @param req
@ -42,4 +62,58 @@ export class CacheController extends BaseController {
return this.sendSuccess(res, items) return this.sendSuccess(res, items)
} }
/**
* Serve a list of character hairs and send as JSON
* @param req
* @param res
*/
public async characterHair(req: Request, res: Response) {
const items: any[] = []
const characterHairRepository = new CharacterHairRepository()
const characterHairs = await characterHairRepository.getAll()
for (const characterHair of characterHairs) {
items.push(await characterHair.cache())
}
return this.sendSuccess(res, items)
}
/**
* Serve a list of character types and send as JSON
* @param req
* @param res
*/
public async characterTypes(req: Request, res: Response) {
const items: any[] = []
const characterTypeRepository = new CharacterTypeRepository()
const characterTypes = await characterTypeRepository.getAll()
for (const characterType of characterTypes) {
items.push(await characterType.cache())
}
return this.sendSuccess(res, items)
}
/**
* Serve a list of sprites and send as JSON
* @param req
* @param res
*/
public async sprites(req: Request, res: Response) {
const items: any[] = []
const spriteRepository = new SpriteRepository()
const sprites = await spriteRepository.getAll()
for (const sprite of sprites) {
items.push(await sprite.cache())
}
return this.sendSuccess(res, items)
}
} }

View File

@ -3,4 +3,13 @@ import { Entity } from '@mikro-orm/core'
import { BaseCharacterHair } from '#entities/base/characterHair' import { BaseCharacterHair } from '#entities/base/characterHair'
@Entity() @Entity()
export class CharacterHair extends BaseCharacterHair {} export class CharacterHair extends BaseCharacterHair {
public async cache() {
try {
return this
} catch (error) {
console.error(error)
return {}
}
}
}

View File

@ -3,4 +3,13 @@ import { Entity } from '@mikro-orm/core'
import { BaseCharacterType } from '#entities/base/characterType' import { BaseCharacterType } from '#entities/base/characterType'
@Entity() @Entity()
export class CharacterType extends BaseCharacterType {} export class CharacterType extends BaseCharacterType {
public async cache() {
try {
return this
} catch (error) {
console.error(error)
return {}
}
}
}

View File

@ -3,4 +3,33 @@ import { Entity } from '@mikro-orm/core'
import { BaseSprite } from '#entities/base/sprite' import { BaseSprite } from '#entities/base/sprite'
@Entity() @Entity()
export class Sprite extends BaseSprite {} export class Sprite extends BaseSprite {
public async cache() {
await this.getSpriteActions().load()
try {
return {
id: this.getId(),
name: this.getName(),
createdAt: this.getCreatedAt(),
updatedAt: this.getUpdatedAt(),
spriteActions: this.getSpriteActions().map((spriteAction) => ({
id: spriteAction.getId(),
sprite: spriteAction.getSprite().getId(),
action: spriteAction.getAction(),
// sprites: spriteAction.getSprites(), // We dont want to send this to the client
originX: spriteAction.getOriginX(),
originY: spriteAction.getOriginY(),
isAnimated: spriteAction.getIsAnimated(),
isLooping: spriteAction.getIsLooping(),
frameWidth: spriteAction.getFrameWidth(),
frameHeight: spriteAction.getFrameHeight(),
frameRate: spriteAction.getFrameRate()
}))
}
} catch (error) {
console.error(error)
return {}
}
}
}

View File

@ -3,4 +3,13 @@ import { Entity } from '@mikro-orm/core'
import { BaseTile } from '#entities/base/tile' import { BaseTile } from '#entities/base/tile'
@Entity() @Entity()
export class Tile extends BaseTile {} export class Tile extends BaseTile {
public async cache() {
try {
return this
} catch (error) {
console.error(error)
return {}
}
}
}

View File

@ -1,23 +0,0 @@
import { BaseEvent } from '#application/base/baseEvent'
import { CharacterHair } from '#entities/characterHair'
import CharacterHairRepository from '#repositories/characterHairRepository'
interface IPayload {}
export default class characterHairListEvent extends BaseEvent {
public listen(): void {
this.socket.on('character:hair:list', this.handleEvent.bind(this))
}
private async handleEvent(data: IPayload, callback: (response: CharacterHair[]) => void): Promise<void> {
try {
const characterHairRepository = new CharacterHairRepository()
const items: CharacterHair[] = await characterHairRepository.getAllSelectable(['sprite'])
return callback(items)
} catch (error) {
this.logger.error('character:hair:list error', error)
return callback([])
}
}
}

View File

@ -32,9 +32,6 @@ export default class CharacterConnectEvent extends BaseEvent {
return return
} }
// Populate character with characterType and characterHair
await this.characterRepository.getEntityManager().populate(character, ['characterType', 'characterHair'])
// Set character id // Set character id
this.socket.characterId = character.id this.socket.characterId = character.id

View File

@ -12,9 +12,6 @@ export default class CharacterListEvent extends BaseEvent {
const characterRepository = new CharacterRepository() const characterRepository = new CharacterRepository()
let characters: Character[] = await characterRepository.getByUserId(this.socket.userId!) let characters: Character[] = await characterRepository.getByUserId(this.socket.userId!)
// Populate characters with characterType and characterHair
await characterRepository.getEntityManager().populate(characters, ['characterType', 'characterHair'])
this.socket.emit('character:list', characters) this.socket.emit('character:list', characters)
} catch (error: any) { } catch (error: any) {
this.logger.error('character:list error', error.message) this.logger.error('character:list error', error.message)

View File

@ -37,16 +37,18 @@ class HttpManager {
app.get('/avatar/s/:characterTypeId/:characterHairId?', (req, res) => this.avatarController.getByParams(req, res)) app.get('/avatar/s/:characterTypeId/:characterHairId?', (req, res) => this.avatarController.getByParams(req, res))
// Assets routes // Assets routes
app.get('/assets/list_tiles', (req, res) => this.assetsController.listTiles(req, res))
app.get('/assets/list_tiles/:mapId', (req, res) => this.assetsController.listTilesByMap(req, res))
app.get('/assets/list_sprite_actions/:spriteId', (req, res) => this.assetsController.listSpriteActions(req, res)) app.get('/assets/list_sprite_actions/:spriteId', (req, res) => this.assetsController.listSpriteActions(req, res))
// Download texture file // Download texture file
app.get('/textures/:type/:spriteId?/:file', (req, res) => this.texturesController.download(req, res)) app.get('/textures/:type/:spriteId?/:file', (req, res) => this.texturesController.download(req, res))
// Cache routes // Cache routes
app.get('/cache/tiles', (req, res) => this.cacheController.tiles(req, res))
app.get('/cache/maps', (req, res) => this.cacheController.maps(req, res)) app.get('/cache/maps', (req, res) => this.cacheController.maps(req, res))
app.get('/cache/map_objects', (req, res) => this.cacheController.mapObjects(req, res)) app.get('/cache/map_objects', (req, res) => this.cacheController.mapObjects(req, res))
app.get('/cache/sprites', (req, res) => this.cacheController.sprites(req, res))
app.get('/cache/character_types', (req, res) => this.cacheController.characterTypes(req, res))
app.get('/cache/character_hair', (req, res) => this.cacheController.characterHair(req, res))
} }
} }

View File

@ -74,7 +74,7 @@ class TeleportService {
// Notify clients // Notify clients
io.in(options.targetMapId).emit('map:character:join', mapCharacter) io.in(options.targetMapId).emit('map:character:join', mapCharacter)
socket.emit('map:character:teleport', { socket.emit('map:character:teleport', {
map: map, mapId: options.targetMapId,
characters: targetMap.getCharactersInMap() characters: targetMap.getCharactersInMap()
}) })