mirror of
https://github.com/JonnyBro/JaBa.git
synced 2024-12-28 14:23:02 +05:00
Compare commits
3 commits
a3c7d1fef6
...
c7ebdb78d4
Author | SHA1 | Date | |
---|---|---|---|
|
c7ebdb78d4 | ||
|
ac461a104d | ||
|
b26222a947 |
4 changed files with 62 additions and 56 deletions
9
src/adapters/cache/ICacheAdapter.js
vendored
Normal file
9
src/adapters/cache/ICacheAdapter.js
vendored
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
export default class ICacheAdapter {
|
||||||
|
get() {}
|
||||||
|
|
||||||
|
set() {}
|
||||||
|
|
||||||
|
clear() {}
|
||||||
|
|
||||||
|
delete() {}
|
||||||
|
}
|
24
src/adapters/cache/MapCache.js
vendored
Normal file
24
src/adapters/cache/MapCache.js
vendored
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
import ICacheAdapter from "./ICacheAdapter";
|
||||||
|
|
||||||
|
export default class MapCache extends ICacheAdapter {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.store = new Map();
|
||||||
|
}
|
||||||
|
|
||||||
|
get(key) {
|
||||||
|
return this.store.get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
set(key, value) {
|
||||||
|
this.store.set(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
clear() {
|
||||||
|
this.store.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
delete(key) {
|
||||||
|
this.store.delete(key);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
import mongoose from "mongoose";
|
import mongoose from "mongoose";
|
||||||
import IDatabaseAdapter from "./IDatabaseAdapter.js";
|
import IDatabaseAdapter from "./IDatabaseAdapter.js";
|
||||||
import logger from "../../helpers/logger.js";
|
import logger from "../../helpers/logger.js";
|
||||||
|
import Cache from "../cache/MapCache.js";
|
||||||
|
|
||||||
export default class MongooseAdapter extends IDatabaseAdapter {
|
export default class MongooseAdapter extends IDatabaseAdapter {
|
||||||
/**
|
/**
|
||||||
|
@ -16,8 +17,8 @@ export default class MongooseAdapter extends IDatabaseAdapter {
|
||||||
}
|
}
|
||||||
|
|
||||||
this.uri = uri;
|
this.uri = uri;
|
||||||
|
|
||||||
this.options = options;
|
this.options = options;
|
||||||
|
this.cache = new Cache();
|
||||||
}
|
}
|
||||||
|
|
||||||
async connect() {
|
async connect() {
|
||||||
|
@ -28,21 +29,44 @@ export default class MongooseAdapter extends IDatabaseAdapter {
|
||||||
async disconnect() {
|
async disconnect() {
|
||||||
await mongoose.disconnect();
|
await mongoose.disconnect();
|
||||||
logger.warn("Database disconnected.");
|
logger.warn("Database disconnected.");
|
||||||
|
this.cache.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
#generateCacheKey(modelName, query, options) {
|
||||||
|
return `${modelName}:${JSON.stringify(query)}:${JSON.stringify(options)}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
async find(model, query = {}, options = {}) {
|
async find(model, query = {}, options = {}) {
|
||||||
return model.find(query, null, options).exec();
|
const cacheKey = this.#generateCacheKey(model.modelName, query, options);
|
||||||
|
if (this.cache.get(cacheKey)) {
|
||||||
|
return this.cache.get(cacheKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = await model.find(query, null, options).exec();
|
||||||
|
this.cache.set(cacheKey, result);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
async findOne(model, query = {}, options = {}) {
|
async findOne(model, query = {}, options = {}) {
|
||||||
return model.findOne(query, null, options).exec();
|
const cacheKey = this.#generateCacheKey(model.modelName, query, options);
|
||||||
|
if (this.cache.get(cacheKey)) {
|
||||||
|
return this.cache.get(cacheKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = await model.findOne(query, null, options).exec();
|
||||||
|
this.cache.set(cacheKey, result);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
async updateOne(model, filter, update, options = {}) {
|
async updateOne(model, filter, update, options = {}) {
|
||||||
return model.updateOne(filter, update, options).exec();
|
const result = await model.updateOne(filter, update, options).exec();
|
||||||
|
this.cache.clear();
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
async deleteOne(model, filter) {
|
async deleteOne(model, filter) {
|
||||||
return model.deleteOne(filter).exec();
|
const result = await model.deleteOne(filter).exec();
|
||||||
|
this.cache.clear();
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
import { use, init, getFixedT } from "i18next";
|
|
||||||
import Backend from "i18next-fs-backend";
|
|
||||||
import { join, resolve } from "path";
|
|
||||||
import { promises as fs } from "fs";
|
|
||||||
|
|
||||||
async function walkDirectory(dir, namespaces = [], folderName = "") {
|
|
||||||
const files = await fs.readdir(dir);
|
|
||||||
|
|
||||||
const languages = [];
|
|
||||||
for (const file of files) {
|
|
||||||
const stat = await fs.stat(join(dir, file));
|
|
||||||
if (stat.isDirectory()) {
|
|
||||||
const isLanguage = file.includes("-");
|
|
||||||
if (isLanguage) languages.push(file);
|
|
||||||
|
|
||||||
const folder = await walkDirectory(join(dir, file), namespaces, isLanguage ? "" : `${file}/`);
|
|
||||||
|
|
||||||
namespaces = folder.namespaces;
|
|
||||||
} else {
|
|
||||||
namespaces.push(`${folderName}${file.substr(0, file.length - 5)}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
namespaces: [...new Set(namespaces)],
|
|
||||||
languages,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export default async () => {
|
|
||||||
const options = {
|
|
||||||
loadPath: resolve(__dirname, "../languages/{{lng}}/{{ns}}.json"),
|
|
||||||
};
|
|
||||||
|
|
||||||
const { namespaces, languages } = await walkDirectory(resolve(__dirname, "../languages/"));
|
|
||||||
|
|
||||||
use(Backend);
|
|
||||||
|
|
||||||
await init({
|
|
||||||
backend: options,
|
|
||||||
debug: false,
|
|
||||||
fallbackLng: "en-US",
|
|
||||||
initImmediate: false,
|
|
||||||
interpolation: { escapeValue: false },
|
|
||||||
load: "all",
|
|
||||||
ns: namespaces,
|
|
||||||
preload: languages,
|
|
||||||
});
|
|
||||||
|
|
||||||
return new Map(languages.map(item => [item, getFixedT(item)]));
|
|
||||||
};
|
|
Loading…
Reference in a new issue