Информация о группе Закрытая

administrators

Список участников
  • Ошибка: permission denied for schema public (Postgresql 15)

    Если вылезла подобная ошибка:

    driverError: error: permission denied for schema public
    

    PostgreSQL версии 15+ может выдать сообщение об ошибке, что у вас нет разрешения на создание чего-либо внутри общедоступной схемы, если заранее явно не указать, кому разрешено это делать.

    Нам нужно явно предоставить разрешения пользователю.

    1. Сначала заходим в cli Нашей СУБД
    sudo su postgres
    
    psql -d {database}
    
    1. далее назначаем права
    GRANT ALL ON SCHEMA public TO {user};
    
    1. выходим
    \q
    

    {database} - имя базы данных
    {user} - имя пользователя

    написал в PostgreSQL sql
  • RE: Zod + Nestjs (вместо сlass-validator)

    @Manul поэтому и приходится велосипедить)

    написал в NestJs
  • RE: Vue.js и React — необычное сравнение написал в Веб разработка
  • RE: JavaScript для самых маленьких. Часть #1

    Полезные ресурсы:
    doka.guide
    learn.javascript.ru

    написал в JavaScript
  • RE: JavaScript для самых маленьких. Часть #1

    js.gif

    написал в JavaScript
  • JavaScript для самых маленьких. Часть #1

    Всем привет! И добро пожаловать на наш форум RosDesk!
    Ранее я уже писал небольшие статьи о паттернах, типах и прочих сложных штуках. Сейчас же у меня появилась идея написать серию статьей для самых маленьких булочек 👶 которые хотят разобраться в языке программирования JavaScript. Постараюсь разжёвывать информацию максимально понятно.
    Ну что же, поехали!

    Hello, World!

    HTML отвечает за структуру, а CSS — за внешний вид веб-страниц. Вместе они позволяют создавать красивые сайты, как, например, наш форум.

    Для добавления интерактивности на сайт нужен JavaScript.

    Что такое JavaScript?

    JavaScript — современный язык программирования, дополняющий HTML и CSS. Он приносит интерактивность в веб-документы. Вот что он может делать:

    • Обрабатывать события, такие как клик мыши.
    • Изменять HTML и CSS после загрузки страницы.
    • Создавать анимации и перемещения объектов.
    • Разрабатывать браузерные игры.
    • Обмениваться данными с сервером.
    • Взаимодействовать с веб-камерой, микрофоном и другими устройствами.
    • JavaScript прост в написании. Вы используете команды, похожие на английские слова, чтобы управлять браузером.

    Пример кода:

    let defaultName = "JavaScript";
    function sayHello(name) {
      if (name == null) {
        alert("Hello, " + defaultName + "!");
      } else {
        alert("Hello, " + name + "!");
      }
    }
    

    Не волнуйтесь, если пока что-то непонятно. Обратите внимание на английские слова: function, if, else, alert, name. Со временем вы разберетесь в их значении.

    Теперь, вместо теории, давайте немного попрактикуемся в написании JavaScript-кода и создадим простое приложение, отображающее текст в браузере.

    Начало работы с JavaScript

    Если вы новичок в программировании, не переживайте. Скоро вы поймёте, что JavaScript не так сложен, как кажется. Давайте начнем.

    Для начала вам нужно знать основы создания веб-страниц, использования редактора кода и добавления HTML/CSS. Если вы с этим не знакомы, прочтите статью - https://help.megagroup.ru/chto-takoye-html-i-css.

    Создание HTML-документа

    Откройте HTML-документ, где будете писать JavaScript-код. Запустите редактор кода, например, Visual Studio Code. Если у вас его нет, установите. Создайте новый файл, перейдя к вкладке Untitled.
    8a80ed65-9779-42f5-9bb5-7ddcdacb911a-image.png

    Сохраните файл через File > Save, указав имя и расположение. Добавьте следующий HTML-код:

    <!DOCTYPE html>
    <html lang="ru">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Hello, RosDesk</title>
    </head>
    <body>
        
    </body>
    <script>
    
    </script>
    </html>
    

    После добавления HTML-кода сохраните документ. Теперь откройте файл index.html двойным щелчком на рабочем столе. Ваш браузер по умолчанию отобразит содержимое файла.

    Если все сделано правильно, вы увидите пустую страницу. Это нормально, так как пока что на странице нет видимого содержимого. Исправим это, вернувшись в редактор кода и добавив JavaScript.

    Добавление JavaScript

    Найдите тег script в нижней части HTML-документа. Этот тег служит контейнером для JavaScript-кода. Чтобы отобразить сообщение “Hello, RosDesk!” в диалоговом окне при загрузке страницы, добавьте в тег script следующую строку:

    alert('Hello, RosDesk!')
    

    Сохраните HTML-файл и снова откройте его в браузере. Вы должны увидеть диалоговое окно с сообщением.

    Поздравляю с первой попыткой написания JavaScript-кода! Теперь разберем, как это работает.
    92ff99aa-c44e-4b32-bb4a-3777314c766e-image.png

    Вы только что создали простую JavaScript-инструкцию. Инструкция — это логическая последовательность действий, которые должен выполнить браузер. В обычных приложениях таких инструкций множество, но у нас всего одна:

    alert("Hello, RosDesk!");
    

    Инструкции обычно заканчиваются точкой с запятой (;). Внутри инструкции используется JavaScript-синтаксис. Наш код, хотя и короткий, содержит элемент alert, который отвечает за отображение сообщения. Это слово похоже на английское и означает то же самое в JavaScript: привлечение внимания.

    Alert — это функция, часто используемая в JavaScript. Функции — это фрагменты кода, которые выполняют определенные действия. Они могут быть определены вами, библиотеками или фреймворками. В данном случае функция alert встроена в браузер и отображает диалоговое окно с переданным сообщением. Чтобы использовать функцию alert, достаточно вызвать её с нужным текстом:

    alert("Эй, Привет!");
    

    Текст (или строка) всегда заключен в одинарные или двойные кавычки. Это одна из особенностей JavaScript. Мы рассмотрим строки более подробно позже, а пока замените “hello, world!” на своё имя:

    alert("Ваше имя");
    

    Запустите приложение и увидите своё имя в диалоговом окне.
    4cbf1655-f1b2-45e7-a7db-5b8385f05c3c-image.png
    Проще простого, правда? Вы можете вписать в строку что угодно: имя питомца, название любимого сериала и т.д., а JavaScript все это отобразит.

    Коротко о главном

    В этой главе вы узнали основы написания JavaScript-кода. Мы рассмотрели базовые принципы и термины. Не переживайте, если не запомнили все сразу. В следующих уроках мы детально разберем наиболее интересные части. В конечном итоге, JavaScript позволяет создавать гораздо более сложные и интересные вещи, чем простые диалоговые окна.

    В конце каждой главы вы найдете ссылки на дополнительные ресурсы, созданные мной или другими разработчиками (в комментариях). Они помогут углубить знания, взглянуть на материал с другой стороны и попрактиковаться на сложных примерах. Рассматривайте эту статью как стартовую площадку для освоения более продвинутых тем.

    Если у вас есть вопросы по этой главе, оставляйте сообщения на нашем форуме https://forum.rosdesk.ru.
    И конечно же жду Вас мои маленькие булочки в комментарии 🤗

    написал в JavaScript
  • RE: Vue, Nuxt - глазами React макаки

    @Hater НИПОНЯЛ

    написал в Vue
  • Славянский удар з*лупой

    Вот вечер да, казалось - чем бы мне таким заняться.
    Может покачать скил? Почитать классные статьи ?
    Нет, мне приходит в голову пизданутая идея спросить гугл - Славянский язык программирование, и вот что я получаю: https://github.com/ReaskyDev/DrevneScript

    Гойда пацаны чи нет ?

    написал в JavaScript
  • Zod + Nestjs (вместо сlass-validator)

    Очень удобно внедрять проверку данных запроса декларативно, в контроллерах. Так и учит нас официальная документация nestjs, и для этого нам необходима библиотека class-validator

    Но многим не нравится обмазываться декораторами, особенно когда их много решение кажется очень сомнительным:

    class CreateCompanyDto implements Dto {
        @IsString({message: 'Must be text format'})
        @MinLength(2, { message: "Must have at least 2 characters" })
        @MaxLength(20, { message: "Can't be longer than 20 characters" })
        @IsDefined({ message: 'Must specify a receiver' })
        public name!: string;
    
        @MaxLength(253, { message: "Can't be longer than 253 characters" })
        @IsFQDN({}, {message: 'Must be a valid domain name'})
        @IsDefined({ message: 'Must specify a domain' })
        public domain!: string;
    
        @MaxLength(30, { message: "Can't be longer than 30 characters" })
        @IsString({message: 'Must be text format'})
        @IsDefined({ message: 'Must specify a company size' })
        public size!: string;
    
        @IsPhoneNumber(null, {message: 'Must be a valid phone number'})
        @IsDefined({ message: 'Must specify a phone number' })
        public contact!: string;
    }
    

    Zod - это удобная альтернатива библиотеке проверки классов для проверки тела запроса.

    Пример кода

    Итак поехали…

    Создаем схему

    
    import { z } from "zod";
    
    export const createProductShema = z.object({
      title: z.string(),
      text: z.string(),
      active: z.boolean(),
    });
    
    type CreateProductDtoType = z.infer<typeof createProductShema>;
    
    // или вместо типа можем использовать интерфейс
    export interface CreateProductDto extends CreateProductDtoType {}
    

    z.infer() позволит нам получить тип для данных, которые будем валидировать

    далее создаем Pipe

    @Injectable()
    export class ZodPipe implements PipeTransform {
      constructor(private readonly schema: any) {}
    
      transform(value: any, metadata: ArgumentMetadata) {
        this.schema.parse(value);
        return value;
      }
    }
    

    и обмазываем наш контролер ранее созданным пайпом

    @Controller()
    export class AppController {
      constructor(private readonly productUseCaseService: ProductUseCaseService) {}
    
      @Post()
      createProduct(@Body(new ZodPipe(schema)) body:  CreateProductDto) {
        return this.productUseCaseService.create(body);
      }
    }
    

    Ну и для того, чтобы мы отлавливали ошибки валидации, и формировали ответ запроса как нам нужно
    напишем фильтр и подключим его

    @Catch(ZodError)
    export class ZodFilter<T extends ZodError> implements ExceptionFilter {
      catch(exception: T, host: ArgumentsHost) {
        const ctx = host.switchToHttp();
        const response = ctx.getResponse();
        const status = 400;
        response.status(status).json({
          errors: exception.errors,
          message: exception.message,
          statusCode: status,
        });
      }
    }
    
    async function bootstrap() {
      const app = await NestFactory.create(AppModule);
      app.useGlobalFilters(new ZodFilter());
      await app.listen(3000);
    }
    

    Такая схема кажется гибче, и вообще zod закрывает проблемные места typescript связанные с отсутствием проверки типов в runtime

    написал в NestJs zod nestjs typescript backend
  • RE: [nuxt] A composable that requires access to the Nuxt instance was called outside of a plugin

    Это я замудачил, забыл в шаблоне указать setup в script 🤡

    написал в Vue