mirror of
https://github.com/JonnyBro/JaBa.git
synced 2024-12-29 23:03:02 +05:00
Compare commits
1 commit
0c923bf31a
...
59a59ff8f0
Author | SHA1 | Date | |
---|---|---|---|
|
59a59ff8f0 |
4 changed files with 56 additions and 62 deletions
9
src/adapters/cache/ICacheAdapter.js
vendored
9
src/adapters/cache/ICacheAdapter.js
vendored
|
@ -1,9 +0,0 @@
|
||||||
export default class ICacheAdapter {
|
|
||||||
get() {}
|
|
||||||
|
|
||||||
set() {}
|
|
||||||
|
|
||||||
clear() {}
|
|
||||||
|
|
||||||
delete() {}
|
|
||||||
}
|
|
24
src/adapters/cache/MapCache.js
vendored
24
src/adapters/cache/MapCache.js
vendored
|
@ -1,24 +0,0 @@
|
||||||
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,7 +1,6 @@
|
||||||
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 {
|
||||||
/**
|
/**
|
||||||
|
@ -17,8 +16,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() {
|
||||||
|
@ -29,44 +28,21 @@ 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 = {}) {
|
||||||
const cacheKey = this.#generateCacheKey(model.modelName, query, options);
|
return model.find(query, null, options).exec();
|
||||||
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 = {}) {
|
||||||
const cacheKey = this.#generateCacheKey(model.modelName, query, options);
|
return model.findOne(query, null, options).exec();
|
||||||
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 = {}) {
|
||||||
const result = await model.updateOne(filter, update, options).exec();
|
return model.updateOne(filter, update, options).exec();
|
||||||
this.cache.clear();
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async deleteOne(model, filter) {
|
async deleteOne(model, filter) {
|
||||||
const result = await model.deleteOne(filter).exec();
|
return model.deleteOne(filter).exec();
|
||||||
this.cache.clear();
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
51
src/helpers/languages.js
Normal file
51
src/helpers/languages.js
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
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