domain.queries.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. const redis = require("../redis");
  2. const utils = require("../utils");
  3. const knex = require("../knex");
  4. const env = require("../env");
  5. async function find(match) {
  6. if (match.address && env.REDIS_ENABLED) {
  7. const cachedDomain = await redis.client.get(redis.key.domain(match.address));
  8. if (cachedDomain) return JSON.parse(cachedDomain);
  9. }
  10. const domain = await knex("domains").where(match).first();
  11. if (domain && env.REDIS_ENABLED) {
  12. const key = redis.key.domain(domain.address);
  13. redis.client.set(key, JSON.stringify(domain), "EX", 60 * 15);
  14. }
  15. return domain;
  16. }
  17. function get(match) {
  18. return knex("domains").where(match);
  19. }
  20. async function add(params) {
  21. params.address = params.address.toLowerCase();
  22. const existingDomain = await knex("domains").where("address", params.address).first();
  23. let id = existingDomain?.id;
  24. const newDomain = {
  25. address: params.address,
  26. homepage: params.homepage,
  27. user_id: params.user_id,
  28. banned: !!params.banned,
  29. banned_by_id: params.banned_by_id
  30. };
  31. if (id) {
  32. await knex("domains").where("id", id).update({
  33. ...newDomain,
  34. updated_at: params.updated_at || utils.dateToUTC(new Date())
  35. });
  36. } else {
  37. // Mysql and sqlite don't support returning but return the inserted id by default
  38. const [createdDomain] = await knex("domains").insert(newDomain).returning("id");
  39. id = createdDomain.id;
  40. }
  41. // Query domain instead of using returning as sqlite and mysql don't support it
  42. const domain = await knex("domains").where("id", id).first();
  43. if (env.REDIS_ENABLED) {
  44. redis.remove.domain(domain);
  45. }
  46. return domain;
  47. }
  48. async function update(match, update) {
  49. await knex("domains")
  50. .where(match)
  51. .update({ ...update, updated_at: utils.dateToUTC(new Date()) });
  52. const domains = await knex("domains").select("*").where(match);
  53. if (env.REDIS_ENABLED) {
  54. domains.forEach(redis.remove.domain);
  55. }
  56. return domains;
  57. }
  58. module.exports = {
  59. add,
  60. find,
  61. get,
  62. update,
  63. }