185 похожих чатов

Если кто-то еще будет искать PostgresNIO и PostgresDecodable, то оставлю

свой снипет.

import Foundation
import PostgresNIO

struct CountryRepository {
let client: PostgresClient

func get(id: UUID) async throws -> Country? {
let rows = try await client.query(Country.generateSelectQuery(id: id))

for try await row in rows {
return try Country(row: row.makeRandomAccess())
}

return nil
}
}

struct Country {
enum Fields {
enum V1 {
static var id = "id"
static var name = "name"
static var nameEs = "name_es"
}
}

let id: UUID
let name: String

var nameEs: String?

init(id: UUID = UUID(), name: String) {
self.id = id
self.name = name
}

init(row: PostgresRandomAccessRow) throws {
self.id = try row[Fields.V1.id].decode(UUID.self)
self.name = try row[Fields.V1.name].decode(String.self)

if row.contains(Fields.V1.nameEs) {
self.nameEs = try row[Fields.V1.nameEs].decode(String.self)
}
}
}

extension Country {
static var schema: String = "countries"

static func generateSelectQuery() -> PostgresQuery {
PostgresQuery(stringLiteral: "SELECT * FROM " + schema)
}

static func generateSelectQuery(id: UUID) -> PostgresQuery {
PostgresQuery(stringLiteral: "SELECT * FROM " + schema + " WHERE id = '\(id)'")
}
}

9 ответов

70 просмотров

Безопаснее будет вместо PostgresQuery(stringLiteral:) использовать PostgresQuery(stringInterpolation:)

Egor-Ledkov Автор вопроса
Тимур
Безопаснее будет вместо PostgresQuery(stringLitera...

Я вот думал об этом. В сущности боремся с SQL инъекциями.. Но существует ли такая опасность на сервере, внутри докера, в котором только приложение общается с базой, и никуда никаких портов не прокинуто? Ну кроме 80 к приложению понятно..

Egor Ledkov
Я вот думал об этом. В сущности боремся с SQL инъе...

Это вопрос из разряда "нужно ли включать поворотник на пустом перекрестке в 4ч утра?" Правильный ответ — не нужно вообще об этом думать, практика поступать так, как следует, должна быть закреплена на уровне рефлексов. :) Ну т.е. просто вообще никогда не нужно применять потенциально небезопасных решений и пытаться в каждом конкретном случае (кроме элементарных) выяснить спектр возможных угро и их вероятность в данном случае. Лишняя работа и ненулевая вероятность ошибочной оценки угроз. К тому же, рано или поздно наступит момент, когда ты просто скопипастишь код, подумав "я это уже делал же, у меня есть готовое решение" и забыв, что этот код писался для другого кейса.

Возвращаясь к вопросу — в коде одной из миграций у меня есть вот такое, это SQLKit: let initialId = String(LoadMigrationSeed_v2_0_0.ininialId) let rawSQL: SQLQueryString = "ALTER SEQUENCE \(raw: LoadAutoID.schema)_id_seq RESTART WITH \(raw: initialId);" return [ db.schema(LoadAutoID.schema) .field("id", .sql(raw: "SERIAL NOT NULL PRIMARY KEY")) .field(LoadAutoID.FieldKeys.updatedAt, .datetime, .required) .create(), (db as! SQLDatabase) .raw(rawSQL) .run() ].sequencedFlatMapEach(on: db.eventLoop) { $0 } (просто для информации)

Не уверен, что здесь точно происходит, но есть функции .all(decoding:) и .first(decoding:)

Egor-Ledkov Автор вопроса
Dmytro
Не уверен, что здесь точно происходит, но есть фун...

На картинке работа SQLKit (аналог PostgresKit). Как понимаю, это промежуточный уровень между PostgresNIO и Fluent.

Egor Ledkov
На картинке работа SQLKit (аналог PostgresKit). Ка...

PostgresNIO это сам клиент, а SQLKit универсальная обертка над всеми клиентами

Egor-Ledkov Автор вопроса
Dmytro
PostgresNIO это сам клиент, а SQLKit универсальная...

Да, все верно, а Fluent еще более универсальная и более обертка)

Похожие вопросы

Обсуждают сегодня

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
Блин, интересно, кто-нибудь когда-нибудь переписывал какую-нибудь игру с x86 на arm? Вообще, такое возможно?
Alan 🔝 Бэброу
12
I just installed it but how do I use it?
Talula
12
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
здравствуйте, у меня есть число шестнадцаттиричное, FFFB например, это -5, как мне в консоль вывести -5? мой самописный atoi преобразовывает -5 в 65531
Maxim Of course
7
Всем доброго дня! Подскажите может кто использовал связку Pagebuilder + Clientsetting. Сами параметры с типом pagebuilder в модуле Clientsetting работают нормально, можно такж...
Александр Добриков
12
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
7
А почему в си некоторые вещи работают с двойными кавычками некоторые с одинарными? Нельзя было все сделать с одними или чтоб работало с разными? например чтоб выводить строки ...
.
15
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Карта сайта