seed.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import "dotenv/config"
  2. import { includes, isArray, isPlainObject, map, mapValues } from "lodash-es"
  3. import prisma from "../server/utils/prisma.js"
  4. import characters from "./seeds/Character.json" with { type: "json" }
  5. function parseTimestamps(value, key) {
  6. if (includes(["createdAt", "updatedAt"], key)) {
  7. return new Date(value)
  8. } else {
  9. return value
  10. }
  11. }
  12. function deepConvertValues(object, converter) {
  13. // converter called with (value, key, object)
  14. if (isArray(object)) {
  15. return map(object, (element) => deepConvertValues(element, converter))
  16. } else if (isPlainObject(object)) {
  17. return mapValues(
  18. object,
  19. (value, key, object) => {
  20. if (isArray(value) || isPlainObject(value)) {
  21. return deepConvertValues(value, converter)
  22. } else {
  23. return converter(value, key, object)
  24. }
  25. }
  26. )
  27. } else {
  28. return object
  29. }
  30. }
  31. function deepParseTimestamps(object) {
  32. return deepConvertValues(object, parseTimestamps)
  33. }
  34. async function seedCharacters() {
  35. const { count } = await prisma.character.createMany({
  36. data: deepParseTimestamps(characters)
  37. })
  38. console.log(`Created ${count} characters.`)
  39. }
  40. async function main() {
  41. await seedCharacters()
  42. }
  43. main()
  44. .catch((error) => {
  45. if (error.meta?.message !== "not an error") {
  46. console.error(error)
  47. process.exit(1)
  48. }
  49. })
  50. .finally(async () => await prisma.$disconnect())