Поэтому они более или менее взаимозаменяемы. Но это только с точки зрения правил применения
Читать полностью…не компилируется, потому что передача строки в роли T должна требовать String <:< f.T, а не наоборот
def ff(f: A)(using String <:< f.T) = f.set("hello")Читать полностью…
def singup(): Action[JsValue] = Action(parse.json) { request =>
request.body.validate[CreateUser].fold(error => BadRequest(JsError.toJson(error)), { auth =>
val code: String = Random.between(100000, 1000000).toString
database.UserRepositories.getByusername(auth.username).flatMap {
case None => database.UserRepositories.getBynumber(auth.number).flatMap {
case None => smsService.sendsms(auth.number,code) match {
case true => Ok(Json.toJson(Map("token" -> authService.encodeTokensingup(CreateUserToken(auth.number,auth.username,auth.email,auth.password,auth.name,auth.lname,code)))))
case false => BadRequest("error send sms")
}
case Some(existing) => Ok(Json.obj("message" -> ("number is singup")))
}.recover { case _ => ServiceUnavailable }
case Some(existing) => Ok(Json.obj("message" -> ("username in singup")))
}.recover { case _ => ServiceUnavailable }
})
}
Может кто подсказать видеоматериал по tapir + http4s(можно что-то другое)?
Язык не важен, желательно русский/английский
Извиняюсь за вопрос не в тему, кто английский учит, посоветуйте приложение где есть отмотка назад на 5-10 секунд. Спасибо
Читать полностью…да у меня прям просто добавление записи было - я их idшки сохранял - а потом просто удалял в случае ошибки
Читать полностью…Есть ли способ по типу A получить тип T? A#T не работает, тянуть экземпляр a: A .... a.T не хочется.
Читать полностью…В реальности компилятор, в частности вывод типов и поиск имплиситов работают с ними по-разному во многих случаях
Читать полностью…Я пытаюь понять отличие A[T] от A {type T} и что где лучше использовать. Получается, в дотти они идентичны за вычетом синтаксиса?
Читать полностью…trait A {
type T
def set(v: T) = ()
}
def ff(f: A)(using f.T <:< String) = f.set("hello")
found : play.api.mvc.Result
[error] required: scala.concurrent.Future[?]
[error] case true => Ok(Json.toJson(Map("token" -> authService.encodeTokensingup(CreateUserToken(auth.number,auth.user
name,auth.email,auth.password,auth.name,auth.lname,code)))))
У меня с конкурентными изменениями. Лочить все равно так или иначе запись придется, хоть в редис, хоть в бд. Это происходит в отдельном воркере, который если что перезапускается. А если второй воркер, то чтобы их синхронизировать и обеспечить последовательность обработки это сильно приседать нужно. Пока 1 инстанс сделал. Тоже лочусь на отправку мессаджа. Тоже читать во время лока можно.
Читать полностью…Да в общем нет, в данном случае у нас нет конкурентных изменений одной и той же записи, только читать могут.
Читать полностью…у меня было простое добавление записи - поэтому было легко написать обратный запрос
Читать полностью…