select
min(employee_id) employee_id_first,
max(employee_id) employee_id_second,
office_id
from t
group by office_id
Вся суть вопроса только в этом, не заменить бэк, не отнять у них работу, а оперативно согласовывать API
Но если у меня на картинке (окей, экране интерфейса) список пользователей, я не могу спроектировать к этой области API вместе с DTO (модель, схема данных)?
Это ваша личная оценка, у меня это был как вопрос
"Получает бек должен хорошо разбираться в дизайне, понимать как работает приложение и т.д. Верно?"
Поэтому оценка, что бекенд не может, ваш вывод.
у меня где-то написано про такую позицию? Если описание DTO на фронтенл для API вызывает такую реакцию, то у бекенд разработчика проблемы с самооценкой наверное.
То есть в Вашем случае, мы должны ставить задачи беку и прикладывать к ним картинки? По этим картинкам они уже создают API? Фронты пока сидят и ждут когда бэк что-то уже сделает? Получает бек должен хорошо разбираться в дизайне, понимать как работает приложение и т.д. Верно?
В качестве вывода, в Вашем случае фронт все таки не могут предлагать контракт взаимодействия с беком путем написания его в Swagger со последующим обсуждением и правками с бэком?
Почему заранее нельзя договориться с фронтом как данные будут бегать туда-обратно и начать работу параллельно?
function method(ActionInterface $action) {
return $action->methodLikeInvoke();
}
Interface ActionInterface
{
public function methodLikeInvoke() : bool
}
Class Action implements ActionInterface
{
public function methodLikeInvoke() { ... }
}
в любом случае в invoke и ответственность закрывается одна
в случае паттернов появляется гибкость, да одни плюсы, минусов просто нет... не понимаю вас
вы ошибаетесь, если представить процесс объектом, то как раз его функциональное представление — наиболее лаконичное и целостное представление
а вот так лаконично
class Validator {
public function __invoke($data)
}
$validator($obj)
function validate($data)
validate($obj)
/**
* Retrieve the authenticated user for the incoming request.
*
* @param \Illuminate\Http\Request $request
* @return mixed
*/
public function __invoke(Request $request)
{
if ($user = $this->auth->guard(config('sanctum.guard', 'web'))->user()) {
return $this->supportsTokens($user)
? $user->withAccessToken(new TransientToken)
: $user;
}
if ($token = $request->bearerToken()) {
$model = Sanctum::$personalAccessTokenModel;
$accessToken = $model::findToken($token);
if (! $accessToken ||
($this->expiration &&
$accessToken->created_at->lte(now()->subMinutes($this->expiration)))) {
return;
}
return $this->supportsTokens($accessToken->tokenable) ? $accessToken->tokenable->withAccessToken(
tap($accessToken->forceFill(['last_used_at' => now()]))->save()
) : null;
}
}
return $accessToken->tokenable->withAccessToken(
tap($accessToken->forceFill(['last_used_at' => now()]))->save()
)