Skip to content

Commit

Permalink
Merge branch 'next' into cli-override-options
Browse files Browse the repository at this point in the history
  • Loading branch information
NathanPip committed Jan 17, 2023
2 parents 9afc402 + 3775e4e commit fc0d27f
Show file tree
Hide file tree
Showing 9 changed files with 92 additions and 76 deletions.
1 change: 1 addition & 0 deletions www/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,7 @@ export const SIDEBAR: Sidebar = {
Deployment: [
{ text: "Vercel", link: "ru/deployment/vercel" },
{ text: "Docker", link: "ru/deployment/docker" },
{ text: "Netlify", link: "ru/deployment/netlify" },
],
},
no: {
Expand Down
1 change: 1 addition & 0 deletions www/src/pages/ru/deployment/docker.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ CMD ["node", "server.js"]
>
> - _Эмуляция `--platform=linux/amd64` может не быть необходимой после перехода на Node 18._
> - _Посмотрите [`node:alpine`](https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine) чтобы понять, почему `libc6-compat` может быть необходим._
> - _Использование образов, основанных на Alpine 3.17 [может привести к проблемам с Prisma](https://github.com/t3-oss/create-t3-app/issues/975). Установка `engineType = "binary"` решает проблему с Alpine 3.17, [но имеет связанные с этим затраты производительности](https://www.prisma.io/docs/concepts/components/prisma-engines/query-engine#the-query-engine-at-runtime)._
> - _Next.js собирает [анонимные данные о телеметрии общего использования](https://nextjs.org/telemetry). Раскомментируйте первый экземпляр `ENV NEXT_TELEMETRY_DISABLED 1`, чтобы отключить телеметрию во время сборки. Раскомментируйте второй экземпляр, чтобы отключить телеметрию во время выполнения._
</div>
Expand Down
2 changes: 1 addition & 1 deletion www/src/pages/ru/deployment/vercel.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ lang: ru

## Конфигурация проекта

Скорее всего Vercel настроит вашу команду сборки и каталог публикации автоматически. Однако вы также можете уточнить эту информацию вместе с другими конфигурациями, создав файл [`vercel.json`](https://vercel.com/docs/project-configuration) и включив в него следующие команды:
Скорее всего Vercel настроит вашу команду сборки и каталог публикации автоматически. Однако вы также можете уточнить эту информацию вместе с другими конфигурациями, создав файл [`vercel.json`](https://vercel.com/docs/project-configuration) и включив в него следующие команды. **В большинстве проектов это делать необязательно.**

```json
{
Expand Down
6 changes: 3 additions & 3 deletions www/src/pages/ru/faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ lang: ru

### Статьи

- [Build a full stack app with create-t3-app](https://www.nexxel.dev/blog/ct3a-guestbook)
- [A first look at create-t3-app](https://dev.to/ajcwebdev/a-first-look-at-create-t3-app-1i8f)
- [Build a full stack app with Create T3 App](https://www.nexxel.dev/blog/ct3a-guestbook)
- [A first look at Create T3 App](https://dev.to/ajcwebdev/a-first-look-at-create-t3-app-1i8f)
- [Migrating your T3 App into a Turborepo](https://www.jumr.dev/blog/t3-turbo)
- [Integrating Stripe into your T3 App](https://blog.nickramkissoon.com/posts/integrate-stripe-t3)

Expand All @@ -40,7 +40,7 @@ lang: ru
- [Build a Blog With the T3 Stack - tRPC, TypeScript, Next.js, Prisma & Zod](https://www.youtube.com/watch?v=syEWlxVFUrY)
- [Build a Live Chat Application with the T3 Stack - TypeScript, Tailwind, tRPC](https://www.youtube.com/watch?v=dXRRY37MPuk)
- [The T3 Stack - How We Built It](https://www.youtube.com/watch?v=H-FXwnEjSsI)
- [An overview of the create T3 App (Next, Typescript, Tailwind, tRPC, Next-Auth)](https://www.youtube.com/watch?v=VJH8dsPtbeU)
- [An overview of the Create T3 App (Next, Typescript, Tailwind, tRPC, Next-Auth)](https://www.youtube.com/watch?v=VJH8dsPtbeU)

## Почему в проекте есть файлы `.js`?

Expand Down
57 changes: 21 additions & 36 deletions www/src/pages/ru/folder-structure.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ import Diagram from "../../components/docs/folderStructureDiagram.astro";
Файл `[trpc].ts` - это точка входа tRPC API. Он используется для обработки запросов tRPC. Смотрите [Использование tRPC](/ru/usage/trpc#-pagesapitrpctrpcts) для получения дополнительной информации об этом файле и [документацию Next.js о динамических маршрутах](https://nextjs.org/docs/routing/dynamic-routes) для получения информации о маршрутах catch-all/slug.

</div>
<div data-components="trpc prisma">
<div data-components="trpc prisma nextauth">

### `src/server`

Expand All @@ -72,72 +72,57 @@ import Diagram from "../../components/docs/folderStructureDiagram.astro";
</div>
<div data-components="nextauth+trpc">

### `src/server/common`
#### `src/server/auth.ts`

Папка `common` содержит общий код, используемый на стороне сервера.

</div>
<div data-components="nextauth+trpc">

#### `src/server/common/get-server-auth-session.ts`

Файл `get-server-auth-session.ts` используется для получения сеанса NextAuth.js на стороне сервера. Смотрите [Использование NextAuth.js](/ru/usage/next-auth#usage-with-trpc) для получения дополнительной информации.
Содержит утилиты для аутентификации, такие как получение сеанса пользователя на стороне сервера. Смотрите [Использование NextAuth.js](/ru/usage/next-auth#usage-with-trpc) для получения дополнительной информации.

</div>
<div data-components="prisma">

#### `src/server/db/client.ts`
#### `src/server/db.ts`

Файл `client.ts` используется для создания экземпляра клиента Prisma в глобальной области видимости. Смотрите [Использование Prisma](/ru/usage/prisma#prisma-client) для получения дополнительной информации.
Файл `db.ts` используется для создания клиента Prisma на глобальном уровне. Смотрите [Использование Prisma](/ru/usage/prisma#prisma-client) и [лучшие практики по использованию Prisma с Next.js](https://www.prisma.io/docs/guides/database/troubleshooting-orm/help-articles/nextjs-prisma-client-dev-practices) для получения дополнительной информации.

</div>
<div data-components="trpc">

### `src/server/trpc`
### `src/server/api`

Папка `trpc` содержит серверный код tRPC.
Папка `api` содержит серверный код tRPC.

</div>
<div data-components="trpc">

#### `src/server/trpc/context.ts`
#### `src/server/api/routers`

Файл `context.ts` используется для создания контекста, используемого в запросах tRPC. Смотрите [Использование tRPC](/ru/usage/trpc#-servertrpccontextts) для получения дополнительной информации.
Папка `routers` содержит все ваши под-маршрутизаторы tRPC.

</div>
<div data-components="trpc">

#### `src/server/trpc/trpc.ts`

Файл `trpc.ts` используется для экспорта помощников процедур. Смотрите [Использование tRPC](/ru/usage/trpc#-servertrpctrpcts) для получения дополнительной информации.

</div>
<div data-components="trpc">
#### `src/server/api/routers/example.ts`

### `src/server/trpc/router`
Файл `example.ts` - это пример маршрутизатора tRPC, использующий вспомогательную функцию `publicProcedure` для демонстрации того, как создать публичный маршрут tRPC.

Папка `router` содержит маршрутизаторы tRPC.
Основываясь на выбранных вами пакетах, этот маршрутизатор содержит больше или меньше маршрутов для лучшего демонстрирования использования ваших потребностей.

</div>
<div data-components="trpc">

#### `src/server/trpc/router/_app.ts`
#### `src/server/api/trpc.ts`

Файл `_app.ts` используется для объединения маршрутизаторов tRPC и экспорта их в виде единого маршрутизатора, а также определений типов. Смотрите [Использование tRPC](/ru/usage/trpc#-servertrpcrouterts) для получения дополнительной информации.
Файл `trpc.ts` - это основной файл конфигурации для вашего tRPC-бэкэнда. В нем мы:

</div>
<div data-components="nextauth+trpc">

#### `src/server/trpc/router/auth.ts`

Файл `auth.ts` является примером маршрутизатора tRPC, использующего вспомогательную функцию `protectedProcedure` для демонстрации защиты маршрута tRPC с помощью NextAuth.js.
1. Определяем контекст используемый в запросах tRPC. Смотрите [Использование tRPC](/ru/usage/trpc#-servertrpccontextts) для получения дополнительной информации.
2. Экспортируем вспомогательные функции процедур. Смотрите [Использование tRPC](/ru/usage/trpc#-servertrpctrpcts) для получения дополнительной информации.

</div>

<div data-components="trpc">

#### `src/server/trpc/router/example.ts`
#### `src/server/api/root.ts`

Файл `example.ts` является примером маршрутизатора tRPC, использующего вспомогательую функцию `publicProcedure` для демонстрации создания публичного маршрута tRPC.
Файл `root.ts` используется для слияния маршрутизаторов tRPC и экспорта их как единого маршрутизатора, а также определения типа маршрутизатора. Смотрите [Использование tRPC](/ru/usage/trpc#-servertrpcrouterts) для получения дополнительной информации.

</div>
<div>
Expand Down Expand Up @@ -170,9 +155,9 @@ import Diagram from "../../components/docs/folderStructureDiagram.astro";
</div>
<div data-components="trpc">

#### `src/utils/trpc.ts`
#### `src/utils/api.ts`

Файл `trpc.ts` является точкой входа для tRPC на стороне клиента. Смотрите [Использование tRPC](/ru/usage/trpc#-utilstrpcts) для получения дополнительной информации.
Файл `api.ts` является точкой входа для tRPC на стороне клиента. Смотрите [Использование tRPC](/ru/usage/trpc#-utilstrpcts) для получения дополнительной информации.

</div>
<div>
Expand Down
1 change: 1 addition & 0 deletions www/src/pages/ru/t3-collection.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ lang: ru
| KARA Shop - Ecommerce website | [mehrabmp/kara-shop](https://github.com/mehrabmp/kara-shop) | [karashop.vercel.app](https://karashop.vercel.app/) |
| Tauri T3 App - Tauri App using T3 Stack | [tauri-t3-app](https://github.com/AyanavaKarmakar/tauri-t3-app) | [tauri-t3-app.docs](https://github.com/AyanavaKarmakar/tauri-t3-app#readme) |
| Azon - E-Commerce website | [andrewsolonets/Azon-Shop](https://github.com/andrewsolonets/Azon-Shop) | [azon-shop.vercel.app](https://azon-shop.vercel.app/) |
| Analyzemyrepo.com - Useful insights for **any** GitHub repo | [CrowdDotDev/analyzemyrepo](https://github.com/CrowdDotDev/analyzemyrepo) | [analyzemyrepo.com](https://analyzemyrepo.com) |

## Компании использующие T3 стек

Expand Down
34 changes: 28 additions & 6 deletions www/src/pages/ru/usage/next-auth.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,29 @@ const User = () => {
};
```

## Получение сессии на сервере

Иногда вам может понадобиться запросить сессию на сервере. Чтобы сделать это, предварительно получите сессию с помощью функции-помощника `getServerAuthSession`, которую предоставляет `create-t3-app`, и передайте ее на клиент с помощью `getServerSideProps`:

```tsx:pages/users/[id].tsx
import { getServerAuthSession } from "../server/auth";
import type { GetServerSideProps } from "next";

export const getServerSideProps: GetServerSideProps = async (ctx) => {
const session = await getServerAuthSession(ctx);
return {
props: { session },
};
};

const User = () => {
const { data: session } = useSession();
// NOTE: `session` wont have a loading state since it's already prefetched on the server

...
}
```

## Включение `user.id` в сессию

`create-t3-app` настроен для использования [session callback](https://next-auth.js.org/configuration/callbacks#session-callback) в конфигурации NextAuth.js для включения ID пользователя в объект `session`.
Expand Down Expand Up @@ -73,7 +96,7 @@ declare module "next-auth" {

1. Возьмите сессию из заголовков запроса с помощью функции [`unstable_getServerSession`](https://next-auth.js.org/configuration/nextjs#unstable_getserversession). Не беспокойтесь, эта функция безопасна для использования - имя включает `unstable` только потому, что реализация API может измениться в будущем. Преимущество использования `unstable_getServerSession` вместо обычного `getSession` заключается в том, что это server-side функция и она не вызывает ненужных вызовов fetch. `create-t3-app` создает вспомогательную функцию, которая абстрагирует этот особый API.

```ts:server/common/get-server-auth-session.ts
```ts:server/auth.ts
export const getServerAuthSession = async (ctx: {
req: GetServerSidePropsContext["req"];
res: GetServerSidePropsContext["res"];
Expand All @@ -84,8 +107,8 @@ export const getServerAuthSession = async (ctx: {

Используя эту вспомогательную функцию, мы можем получить сессию и передать ее в контекст tRPC:

```ts:server/trpc/context.ts
import { getServerAuthSession } from "../common/get-server-auth-session";
```ts:server/api/trpc.ts
import { getServerAuthSession } from "../auth";

export const createContext = async (opts: CreateNextContextOptions) => {
const { req, res } = opts;
Expand All @@ -98,7 +121,7 @@ export const createContext = async (opts: CreateNextContextOptions) => {

2. Создайте tRPC middleware, которое проверяет, аутентифицирован ли пользователь. Затем мы используем middleware в `protectedProcedure`. Любой вызывающий эти процедуры должен быть аутентифицирован, иначе будет сгенерирована ошибка, которую можно правильно обработать на стороне клиента.

```ts:server/trpc/trpc.ts
```ts:server/api/trpc.ts
const isAuthed = t.middleware(({ ctx, next }) => {
if (!ctx.session || !ctx.session.user) {
throw new TRPCError({ code: "UNAUTHORIZED" });
Expand All @@ -116,7 +139,7 @@ export const protectedProcedure = t.procedure.use(isAuthed);

Обект сессии - это легкое, минимальное представление пользователя и содержит только несколько полей. При использовании `protectedProcedures` у вас есть доступ к идентификатору пользователя, который можно использовать для получения большего количества данных из базы данных.

```ts:server/trpc/router/user.ts
```ts:server/api/routers/user.ts
const userRouter = router({
me: protectedProcedure.query(async ({ ctx }) => {
const user = await prisma.user.findUnique({
Expand Down Expand Up @@ -164,7 +187,6 @@ const userRouter = router({
- Возле Client Secret нажмите "Reset Secret" и скопируйте эту строку в `DISCORD_CLIENT_SECRET` в `.env`. Будьте осторожны, поскольку вы больше не сможете увидеть этот секрет, и сброс его приведет к тому, что существующий истечет.
- Нажмите "Add Redirect" и вставьте `<app url>/api/auth/callback/discord` (пример для локальной разработки: <code class="break-all">http://localhost:3000/api/auth/callback/discord</code>)
- Сохраните изменения
- It is possible, but not recommended, to use the same Discord Application for both development and production. You could also consider [Mocking the Provider](https://github.com/trpc/trpc/blob/next/examples/next-prisma-starter-websockets/src/pages/api/auth/%5B...nextauth%5D.ts) during development.
- Возможно, но не рекомендуется, использовать одно и то же приложение Discord для разработки и продакшена. Вы также можете рассмотреть [Mocking the Provider](https://github.com/trpc/trpc/blob/next/examples/next-prisma-starter-websockets/src/pages/api/auth/%5B...nextauth%5D.ts) во время разработки.

## Полезные ресурсы
Expand Down
2 changes: 1 addition & 1 deletion www/src/pages/ru/usage/prisma.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ Prisma это ORM для TypeScript, который позволяет опре
```

```ts:prisma/seed.ts
import { prisma } from "../src/server/db/client";
import { prisma } from "../src/server/db";

async function main() {
const id = "cl9ebqhxk00003b600tymydho";
Expand Down

0 comments on commit fc0d27f

Please sign in to comment.