Nexus Prisma — Как обрабатывать createdAt и updatedAt с помощью crud глобально?

#typescript #prisma #nexus-js

#typescript #prisma #nexus-js

Вопрос:

Первое, что я придумал, это вызвать computedInputs nexusPrisma опцию. Но это не сработает, поскольку их нужно обрабатывать по-разному в зависимости от ситуации, но глобально:

 1. create -> createdAt = now, updatedAt = null
2. update -> createdAt = keep as it is, updatedAt = now
 

Чтобы заставить его работать, мне нужно настроить computedInputs индивидуально следующим образом:

 t.crud.createOneX({
  computedInputs: {
    createdAt: () => DateTime.utc().toString(),
    updatedAt: () => null,
  },
});

t.crud.updateOneX({
  computedInputs: {
    createdAt: () => undefined,
    updatedAt: () => DateTime.utc().toString(),
  },
});
 

Хотя это может сработать, я не могу «вычислить» эти входные данные во вложенных моделях. Чтобы предотвратить передачу createdAt / updatedAt, я также должен создать другой t.crud на этом ресурсе, без этих временных меток.

Последний обходной путь для этого, который может сработать, t.crud — это вообще не использовать, что является обломком.

Ответ №1:

Спасибо, что задали вопрос.

Prisma может обрабатывать столбцы createdAt и updatedAt для вас в ваших моделях. Добавьте атрибуты @default(now()) and @updatedAt в свои createdAt updatedAt столбцы and соответственно. Вы можете добавлять столбцы в свои модели следующим образом:

 model Post {
  id               Int                @id @default(autoincrement())
  title            String
  content          String?
  published        Boolean?           @default(false)
  createdAt        DateTime           @default(now())
  updatedAt        DateTime           @updatedAt
}
 

Вы можете узнать больше о @default(now()) и @updatedAt в наших документах.

В случае, если у вас возникнут какие-либо другие проблемы и запросы, я буду рад помочь 🙂

Комментарии:

1. В итоге я вручную создал эти поля. Почувствовал себя более под контролем 😅. PS — Если вы только что зарегистрировались, чтобы ответить на мой вопрос, то я просто хочу, чтобы вы знали, что вы легенда.

2. При использовании @default(now()) и @updatedAt установке 2 разных временных меток при создании определите, была ли обновлена запись с помощью createdAt !== updatedAt always returns true .

3. Имейте в виду, что последующее добавление createdAt with @default(now()) добавляет текущую дату. Это может привести к неправильному пониманию даты создания позже.