Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
D
Doorcode
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
5
Issues
5
List
Boards
Labels
Service Desk
Milestones
Merge Requests
2
Merge Requests
2
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Package Registry
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Guardians of the Kretschmar Elock System
Doorcode
Commits
a5126fcf
Commit
a5126fcf
authored
Jul 20, 2020
by
Jacob Priddy
👌
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Refactor door group adding to not be url based
parent
d558671e
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
120 additions
and
86 deletions
+120
-86
src/backend/app/Http/Controllers/Api/DoorsController.php
src/backend/app/Http/Controllers/Api/DoorsController.php
+38
-18
src/backend/routes/api.php
src/backend/routes/api.php
+7
-2
src/backend/src/UseCases/DoorGroup/AddDoorToGroup/APIPresenter.php
...nd/src/UseCases/DoorGroup/AddDoorToGroup/APIPresenter.php
+2
-1
src/backend/src/UseCases/DoorGroup/AddDoorToGroup/AddDoorToGroup.php
.../src/UseCases/DoorGroup/AddDoorToGroup/AddDoorToGroup.php
+14
-3
src/backend/src/UseCases/DoorGroup/AddDoorToGroup/AddDoorToGroupUseCase.php
...eCases/DoorGroup/AddDoorToGroup/AddDoorToGroupUseCase.php
+3
-4
src/backend/src/UseCases/DoorGroup/AddDoorToGroup/Presenter.php
...ckend/src/UseCases/DoorGroup/AddDoorToGroup/Presenter.php
+2
-0
src/backend/src/UseCases/DoorGroup/AddDoorToGroup/ResponseModel.php
...d/src/UseCases/DoorGroup/AddDoorToGroup/ResponseModel.php
+0
-24
src/backend/src/UseCases/DoorGroup/RemoveDoorFromGroup/APIPresenter.php
...c/UseCases/DoorGroup/RemoveDoorFromGroup/APIPresenter.php
+2
-1
src/backend/src/UseCases/DoorGroup/RemoveDoorFromGroup/Presenter.php
.../src/UseCases/DoorGroup/RemoveDoorFromGroup/Presenter.php
+2
-0
src/backend/src/UseCases/DoorGroup/RemoveDoorFromGroup/RemoveDoorFromGroup.php
...ses/DoorGroup/RemoveDoorFromGroup/RemoveDoorFromGroup.php
+14
-3
src/backend/src/UseCases/DoorGroup/RemoveDoorFromGroup/RemoveDoorFromGroupUseCase.php
...rGroup/RemoveDoorFromGroup/RemoveDoorFromGroupUseCase.php
+3
-4
src/backend/src/UseCases/DoorGroup/RemoveDoorFromGroup/ResponseModel.php
.../UseCases/DoorGroup/RemoveDoorFromGroup/ResponseModel.php
+0
-24
src/backend/src/UseCases/DoorGroup/ResponseModel.php
src/backend/src/UseCases/DoorGroup/ResponseModel.php
+27
-0
src/backend/tests/Feature/Api/DoorGroup/AddDoorToGroupApiTest.php
...end/tests/Feature/Api/DoorGroup/AddDoorToGroupApiTest.php
+3
-1
src/backend/tests/Feature/Api/DoorGroup/RemoveDoorFromGroupApiTest.php
...ests/Feature/Api/DoorGroup/RemoveDoorFromGroupApiTest.php
+3
-1
No files found.
src/backend/app/Http/Controllers/Api/DoorsController.php
View file @
a5126fcf
...
...
@@ -239,55 +239,75 @@ class DoorsController extends ApiController
}
/**
* Add Door
to Group
* Add Door
s to Groups
*
* This endpoint attaches a
door to a group
.
* This endpoint attaches a
list of doors to a list of groups by ids
.
*
* @authenticated
* @urlParam doorId required the door ID to attach. Example: 2
* @urlParam groupId required the group ID to attach to. Example: 8
* @bodyParam doorIds[0] string[] required The list of door Ids to attach to. Example: 2
* @bodyParam doorIds[1] string[] required The list of door Ids to attach to. Example: 1
* @bodyParam groupIds[0] string[] required The list of group Ids to attach to. Example: 8
* @bodyParam groupIds[1] string[] required The list of group Ids to attach to. Example: 7
*
* @param \Source\UseCases\DoorGroup\AddDoorToGroup\AddDoorToGroupUseCase $addDoorToGroup
* @param string $doorId
* @param string $groupId
* @return \Illuminate\Http\JsonResponse
* @throws \Illuminate\Validation\ValidationException
* @throws \Source\Exceptions\AuthorizationException
* @throws \Source\Exceptions\EntityNotFoundException
*/
public
function
addDoor
ToGroup
(
AddDoorToGroupUseCase
$addDoorToGroup
,
string
$doorId
,
string
$groupId
):
JsonResponse
public
function
addDoor
sToGroups
(
AddDoorToGroupUseCase
$addDoorToGroup
):
JsonResponse
{
$this
->
authorizer
->
protect
(
Permissions
::
MANAGE_DOORS
);
$this
->
authorizer
->
protectOne
([
Permissions
::
MANAGE_DOORS
,
Permissions
::
MANAGE_GROUPS
]);
$this
->
validate
(
$this
->
request
,
[
'groupIds'
=>
'array|required'
,
'doorIds'
=>
'array|required'
,
]);
$presenter
=
new
AddDoorToGroupAPIPresenter
();
$addDoorToGroup
->
addDoorToGroup
(
$doorId
,
$groupId
,
$presenter
);
$addDoorToGroup
->
addDoorToGroup
(
$this
->
request
->
input
(
'doorIds'
),
$this
->
request
->
input
(
'groupIds'
),
$presenter
);
return
$this
->
respondWithData
(
$presenter
->
getViewModel
());
}
/**
* Remove Door
from Group
* Remove Door
s from Groups
*
* This endpoint removes a
door from a group
.
* This endpoint removes a
list of doors from a list of groups by ids
.
*
* @authenticated
* @urlParam doorId required the door to detach. Example: 2
* @urlParam groupId required the group to detach from. Example: 8
* @bodyParam doorIds[0] string[] required The list of door Ids to attach to. Example: 2
* @bodyParam doorIds[1] string[] required The list of door Ids to attach to. Example: 1
* @bodyParam groupIds[0] string[] required The list of group Ids to attach to. Example: 8
* @bodyParam groupIds[1] string[] required The list of group Ids to attach to. Example: 7
*
* @param \Source\UseCases\DoorGroup\RemoveDoorFromGroup\RemoveDoorFromGroupUseCase $removeDoorFromGroup
* @param string $doorId
* @param string $groupId
* @return \Illuminate\Http\JsonResponse
* @throws \Illuminate\Validation\ValidationException
* @throws \Source\Exceptions\AuthorizationException
* @throws \Source\Exceptions\EntityNotFoundException
*/
public
function
removeDoor
FromGroup
(
RemoveDoorFromGroupUseCase
$removeDoorFromGroup
,
string
$doorId
,
string
$groupId
):
JsonResponse
public
function
removeDoor
sFromGroups
(
RemoveDoorFromGroupUseCase
$removeDoorFromGroup
):
JsonResponse
{
$this
->
authorizer
->
protect
(
Permissions
::
MANAGE_DOORS
);
$this
->
authorizer
->
protectOne
([
Permissions
::
MANAGE_DOORS
,
Permissions
::
MANAGE_GROUPS
]);
$this
->
validate
(
$this
->
request
,
[
'groupIds'
=>
'array|required'
,
'doorIds'
=>
'array|required'
,
]);
$presenter
=
new
RemoveDoorFromGroupAPIPresenter
();
$removeDoorFromGroup
->
removeDoorFromGroup
(
$doorId
,
$groupId
,
$presenter
);
$removeDoorFromGroup
->
removeDoorFromGroup
(
$this
->
request
->
input
(
'doorIds'
),
$this
->
request
->
input
(
'groupIds'
),
$presenter
);
return
$this
->
respondWithData
(
$presenter
->
getViewModel
());
}
...
...
src/backend/routes/api.php
View file @
a5126fcf
...
...
@@ -72,8 +72,13 @@ Route::group(['middleware' => 'auth:api'], static function () {
Route
::
delete
(
'{doorId}'
,
[
DoorsController
::
class
,
'delete'
])
->
name
(
'doors.delete'
);
Route
::
get
(
'{doorId}/groups'
,
[
DoorsController
::
class
,
'getGroupsForDoor'
])
->
name
(
'doors.groups'
);
Route
::
post
(
'{doorId}/group/{groupId}'
,
[
DoorsController
::
class
,
'addDoorToGroup'
]);
Route
::
delete
(
'{doorId}/group/{groupId}'
,
[
DoorsController
::
class
,
'removeDoorFromGroup'
]);
});
Route
::
group
([
'prefix'
=>
'group/door'
,
],
static
function
()
{
Route
::
post
(
'/attach'
,
[
DoorsController
::
class
,
'addDoorsToGroups'
])
->
name
(
'group-door.attach'
);
Route
::
post
(
'/detach'
,
[
DoorsController
::
class
,
'removeDoorsFromGroups'
])
->
name
(
'group-door.detach'
);
});
Route
::
group
([
...
...
src/backend/src/UseCases/DoorGroup/AddDoorToGroup/APIPresenter.php
View file @
a5126fcf
...
...
@@ -3,6 +3,7 @@
namespace
Source\UseCases\DoorGroup\AddDoorToGroup
;
use
Source\UseCases\BasePresenter
;
use
Source\UseCases\DoorGroup\ResponseModel
;
class
APIPresenter
extends
BasePresenter
implements
Presenter
{
...
...
@@ -11,7 +12,7 @@ class APIPresenter extends BasePresenter implements Presenter
/** @inheritDoc */
public
function
present
(
ResponseModel
$responseModel
):
void
{
$this
->
viewModel
[
'message
'
]
=
$responseModel
->
getMessage
();
$this
->
viewModel
[
'message
s'
]
=
$responseModel
->
getMessages
();
}
/** @inheritDoc */
...
...
src/backend/src/UseCases/DoorGroup/AddDoorToGroup/AddDoorToGroup.php
View file @
a5126fcf
...
...
@@ -2,6 +2,8 @@
namespace
Source\UseCases\DoorGroup\AddDoorToGroup
;
use
Source\UseCases\DoorGroup\ResponseModel
;
use
Source\Exceptions\EntityNotFoundException
;
use
Source\Gateways\DoorGroup\DoorGroupRepository
;
class
AddDoorToGroup
implements
AddDoorToGroupUseCase
...
...
@@ -19,11 +21,20 @@ class AddDoorToGroup implements AddDoorToGroupUseCase
/**
* @inheritDoc
*/
public
function
addDoorToGroup
(
string
$doorId
,
string
$groupId
,
Presenter
$presenter
):
void
public
function
addDoorToGroup
(
array
$doorIds
,
array
$groupIds
,
Presenter
$presenter
):
void
{
$
this
->
repository
->
addDoorToGroup
(
$doorId
,
$groupId
);
$
response
=
new
ResponseModel
(
);
$response
=
new
ResponseModel
(
'Success'
);
foreach
(
$groupIds
as
$groupId
)
{
foreach
(
$doorIds
as
$doorId
)
{
try
{
$this
->
repository
->
addDoorToGroup
(
$doorId
,
$groupId
);
$response
->
addMessage
(
"Attached door
$doorId
to group
$groupId
"
);
}
catch
(
EntityNotFoundException
$e
)
{
$response
->
addMessage
(
"Failed to attach
$doorId
to
$groupId
. "
.
$e
->
getMessage
());
}
}
}
$presenter
->
present
(
$response
);
}
...
...
src/backend/src/UseCases/DoorGroup/AddDoorToGroup/AddDoorToGroupUseCase.php
View file @
a5126fcf
...
...
@@ -6,10 +6,9 @@ namespace Source\UseCases\DoorGroup\AddDoorToGroup;
interface
AddDoorToGroupUseCase
{
/**
* @param
string $doorId
* @param
string $groupId
* @param
array $doorIds
* @param
array $groupIds
* @param \Source\UseCases\DoorGroup\AddDoorToGroup\Presenter $presenter
* @throws \Source\Exceptions\EntityNotFoundException
*/
public
function
addDoorToGroup
(
string
$doorId
,
string
$groupId
,
Presenter
$presenter
):
void
;
public
function
addDoorToGroup
(
array
$doorIds
,
array
$groupIds
,
Presenter
$presenter
):
void
;
}
src/backend/src/UseCases/DoorGroup/AddDoorToGroup/Presenter.php
View file @
a5126fcf
...
...
@@ -2,6 +2,8 @@
namespace
Source\UseCases\DoorGroup\AddDoorToGroup
;
use
Source\UseCases\DoorGroup\ResponseModel
;
interface
Presenter
{
/**
...
...
src/backend/src/UseCases/DoorGroup/AddDoorToGroup/ResponseModel.php
deleted
100644 → 0
View file @
d558671e
<?php
namespace
Source\UseCases\DoorGroup\AddDoorToGroup
;
class
ResponseModel
{
/**
* @var string
*/
protected
string
$message
;
public
function
__construct
(
string
$message
)
{
$this
->
message
=
$message
;
}
/**
* @return string
*/
public
function
getMessage
():
string
{
return
$this
->
message
;
}
}
src/backend/src/UseCases/DoorGroup/RemoveDoorFromGroup/APIPresenter.php
View file @
a5126fcf
...
...
@@ -3,6 +3,7 @@
namespace
Source\UseCases\DoorGroup\RemoveDoorFromGroup
;
use
Source\UseCases\BasePresenter
;
use
Source\UseCases\DoorGroup\ResponseModel
;
class
APIPresenter
extends
BasePresenter
implements
Presenter
{
...
...
@@ -11,7 +12,7 @@ class APIPresenter extends BasePresenter implements Presenter
/** @inheritDoc */
public
function
present
(
ResponseModel
$responseModel
):
void
{
$this
->
viewModel
[
'message
'
]
=
$responseModel
->
getMessage
();
$this
->
viewModel
[
'message
s'
]
=
$responseModel
->
getMessages
();
}
/** @inheritDoc */
...
...
src/backend/src/UseCases/DoorGroup/RemoveDoorFromGroup/Presenter.php
View file @
a5126fcf
...
...
@@ -2,6 +2,8 @@
namespace
Source\UseCases\DoorGroup\RemoveDoorFromGroup
;
use
Source\UseCases\DoorGroup\ResponseModel
;
interface
Presenter
{
/**
...
...
src/backend/src/UseCases/DoorGroup/RemoveDoorFromGroup/RemoveDoorFromGroup.php
View file @
a5126fcf
...
...
@@ -2,6 +2,8 @@
namespace
Source\UseCases\DoorGroup\RemoveDoorFromGroup
;
use
Source\UseCases\DoorGroup\ResponseModel
;
use
Source\Exceptions\EntityNotFoundException
;
use
Source\Gateways\DoorGroup\DoorGroupRepository
;
class
RemoveDoorFromGroup
implements
RemoveDoorFromGroupUseCase
...
...
@@ -19,11 +21,20 @@ class RemoveDoorFromGroup implements RemoveDoorFromGroupUseCase
/**
* @inheritDoc
*/
public
function
removeDoorFromGroup
(
string
$doorId
,
string
$groupId
,
Presenter
$presenter
):
void
public
function
removeDoorFromGroup
(
array
$doorIds
,
array
$groupIds
,
Presenter
$presenter
):
void
{
$
this
->
repository
->
removeDoorFromGroup
(
$doorId
,
$groupId
);
$
response
=
new
ResponseModel
(
);
$response
=
new
ResponseModel
(
'Success'
);
foreach
(
$groupIds
as
$groupId
)
{
foreach
(
$doorIds
as
$doorId
)
{
try
{
$this
->
repository
->
removeDoorFromGroup
(
$doorId
,
$groupId
);
$response
->
addMessage
(
"Successfully added door
$doorId
to group
$groupId
"
);
}
catch
(
EntityNotFoundException
$e
)
{
$response
->
addMessage
(
"Could not add door
$doorId
to group
$groupId
. "
.
$e
->
getMessage
());
}
}
}
$presenter
->
present
(
$response
);
}
...
...
src/backend/src/UseCases/DoorGroup/RemoveDoorFromGroup/RemoveDoorFromGroupUseCase.php
View file @
a5126fcf
...
...
@@ -6,10 +6,9 @@ namespace Source\UseCases\DoorGroup\RemoveDoorFromGroup;
interface
RemoveDoorFromGroupUseCase
{
/**
* @param string
$doorId
* @param string
$groupId
* @param string
[] $doorIds
* @param string
[] $groupIds
* @param \Source\UseCases\DoorGroup\RemoveDoorFromGroup\Presenter $presenter
* @throws \Source\Exceptions\EntityNotFoundException
*/
public
function
removeDoorFromGroup
(
string
$doorId
,
string
$groupId
,
Presenter
$presenter
):
void
;
public
function
removeDoorFromGroup
(
array
$doorIds
,
array
$groupIds
,
Presenter
$presenter
):
void
;
}
src/backend/src/UseCases/DoorGroup/RemoveDoorFromGroup/ResponseModel.php
deleted
100644 → 0
View file @
d558671e
<?php
namespace
Source\UseCases\DoorGroup\RemoveDoorFromGroup
;
class
ResponseModel
{
/**
* @var string
*/
protected
string
$message
;
public
function
__construct
(
string
$message
)
{
$this
->
message
=
$message
;
}
/**
* @return string
*/
public
function
getMessage
():
string
{
return
$this
->
message
;
}
}
src/backend/src/UseCases/DoorGroup/ResponseModel.php
0 → 100644
View file @
a5126fcf
<?php
namespace
Source\UseCases\DoorGroup
;
class
ResponseModel
{
/**
* @var string[]
*/
protected
array
$messages
=
[];
/**
* @param string $message
*/
public
function
addMessage
(
string
$message
):
void
{
$this
->
messages
[]
=
$message
;
}
/**
* @return string[]
*/
public
function
getMessages
():
array
{
return
$this
->
messages
;
}
}
src/backend/tests/Feature/Api/DoorGroup/AddDoorToGroupApiTest.php
View file @
a5126fcf
...
...
@@ -50,7 +50,9 @@ class AddDoorToGroupApiTest extends AuthenticatesWithApplicationTestCase
protected
function
handleTest
(
string
$doorId
,
string
$groupId
):
void
{
$this
->
response
=
$this
->
postJson
(
'api/doors/'
.
$doorId
.
'/group/'
.
$groupId
,
[
$this
->
response
=
$this
->
postJson
(
'api/group/door/attach'
,
[
'doorIds'
=>
[
$doorId
],
'groupIds'
=>
[
$groupId
],
'api_token'
=>
$this
->
authToken
,
]);
}
...
...
src/backend/tests/Feature/Api/DoorGroup/RemoveDoorFromGroupApiTest.php
View file @
a5126fcf
...
...
@@ -50,7 +50,9 @@ class RemoveDoorFromGroupApiTest extends AuthenticatesWithApplicationTestCase
protected
function
handleTest
(
string
$doorId
,
string
$groupId
):
void
{
$this
->
response
=
$this
->
deleteJson
(
'api/doors/'
.
$doorId
.
'/group/'
.
$groupId
,
[
$this
->
response
=
$this
->
postJson
(
'api/group/door/detach'
,
[
'groupIds'
=>
[
$groupId
],
'doorIds'
=>
[
$doorId
],
'api_token'
=>
$this
->
authToken
,
]);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment