Skip to content

Commit de9b34f

Browse files
committed
Rename ShareLinks to PublicShares
1 parent b6c7bd8 commit de9b34f

36 files changed

Lines changed: 1679 additions & 350 deletions

API/Controller/Public/PublicShareController.cs

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,18 @@ namespace OpenShock.API.Controller.Public;
1313
public sealed partial class PublicController
1414
{
1515
/// <summary>
16-
/// Gets information about a public share link.
16+
/// Gets information about a public share.
1717
/// </summary>
18-
/// <param name="shareLinkId"></param>
19-
/// <response code="200">The share link information was successfully retrieved.</response>
20-
/// <response code="404">The share link does not exist.</response>
21-
[HttpGet("shares/links/{shareLinkId}")]
22-
[Tags("Shocker ShareLinks")]
23-
[ProducesResponseType<LegacyDataResponse<PublicShareLinkResponse>>(StatusCodes.Status200OK, MediaTypeNames.Application.Json)]
24-
[ProducesResponseType<OpenShockProblem>(StatusCodes.Status404NotFound, MediaTypeNames.Application.ProblemJson)] // ShareLinkNotFound
25-
public async Task<IActionResult> GetShareLink([FromRoute] Guid shareLinkId)
18+
/// <param name="publicShareId"></param>
19+
/// <response code="200">The public share information was successfully retrieved.</response>
20+
/// <response code="404">The public share does not exist.</response>
21+
[HttpGet("shares/links/{publicShareId}")]
22+
[Tags("Public Shocker Shares")]
23+
[ProducesResponseType<LegacyDataResponse<PublicShareResponse>>(StatusCodes.Status200OK, MediaTypeNames.Application.Json)]
24+
[ProducesResponseType<OpenShockProblem>(StatusCodes.Status404NotFound, MediaTypeNames.Application.ProblemJson)] // PublicShareNotFound
25+
public async Task<IActionResult> GetPublicShare([FromRoute] Guid publicShareId)
2626
{
27-
var shareLink = await _db.ShockerShareLinks.Where(x => x.Id == shareLinkId).Select(x => new
27+
var publicShare = await _db.PublicShares.Where(x => x.Id == publicShareId).Select(x => new
2828
{
2929
Author = new GenericIni
3030
{
@@ -40,7 +40,7 @@ public async Task<IActionResult> GetShareLink([FromRoute] Guid shareLinkId)
4040
{
4141
DeviceId = y.Shocker.Device.Id,
4242
DeviceName = y.Shocker.Device.Name,
43-
Shocker = new ShareLinkShocker
43+
Shocker = new PublicShareShocker
4444
{
4545
Id = y.Shocker.Id,
4646
Name = y.Shocker.Name,
@@ -56,26 +56,26 @@ public async Task<IActionResult> GetShareLink([FromRoute] Guid shareLinkId)
5656
Shock = y.AllowShock,
5757
Live = y.AllowLiveControl
5858
},
59-
Paused = ShareLinkUtils.GetPausedReason(y.IsPaused, y.Shocker.IsPaused),
59+
Paused = PublicShareUtils.GetPausedReason(y.IsPaused, y.Shocker.IsPaused),
6060
}
6161
})
6262
}).FirstOrDefaultAsync();
6363

64-
if (shareLink == null) return Problem(ShareLinkError.ShareLinkNotFound);
64+
if (publicShare == null) return Problem(PublicShareError.PublicShareNotFound);
6565

6666

67-
var final = new PublicShareLinkResponse
67+
var final = new PublicShareResponse
6868
{
69-
Id = shareLink.Id,
70-
Name = shareLink.Name,
71-
Author = shareLink.Author,
72-
CreatedOn = shareLink.CreatedAt,
73-
ExpiresOn = shareLink.ExpiresAt
69+
Id = publicShare.Id,
70+
Name = publicShare.Name,
71+
Author = publicShare.Author,
72+
CreatedOn = publicShare.CreatedAt,
73+
ExpiresOn = publicShare.ExpiresAt
7474
};
75-
foreach (var shocker in shareLink.Shockers)
75+
foreach (var shocker in publicShare.Shockers)
7676
{
7777
if (final.Devices.All(x => x.Id != shocker.DeviceId))
78-
final.Devices.Add(new ShareLinkDevice
78+
final.Devices.Add(new PublicShareDevice
7979
{
8080
Id = shocker.DeviceId,
8181
Name = shocker.DeviceName,

API/Controller/Shares/Links/AddShocker.cs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,33 +11,33 @@ namespace OpenShock.API.Controller.Shares.Links;
1111
public sealed partial class ShareLinksController
1212
{
1313
/// <summary>
14-
/// Add a shocker to a share link
14+
/// Add a shocker to a public share
1515
/// </summary>
16-
/// <param name="shareLinkId"></param>
16+
/// <param name="publicShareId"></param>
1717
/// <param name="shockerId"></param>
1818
/// <response code="200">Successfully added shocker</response>
19-
/// <response code="404">Share link or shocker does not exist</response>
20-
/// <response code="409">Shocker already exists in share link</response>
21-
[HttpPost("{shareLinkId}/{shockerId}")]
19+
/// <response code="404">Public share or shocker does not exist</response>
20+
/// <response code="409">Shocker already exists in public share</response>
21+
[HttpPost("{publicShareId}/{shockerId}")]
2222
[ProducesResponseType<LegacyEmptyResponse>(StatusCodes.Status200OK, MediaTypeNames.Application.Json)]
23-
[ProducesResponseType<OpenShockProblem>(StatusCodes.Status404NotFound, MediaTypeNames.Application.ProblemJson)] // ShareLinkNotFound, ShockerNotFound
24-
[ProducesResponseType<OpenShockProblem>(StatusCodes.Status409Conflict, MediaTypeNames.Application.ProblemJson)] // ShockerAlreadyInShareLink
25-
public async Task<IActionResult> AddShocker([FromRoute] Guid shareLinkId, [FromRoute] Guid shockerId)
23+
[ProducesResponseType<OpenShockProblem>(StatusCodes.Status404NotFound, MediaTypeNames.Application.ProblemJson)] // PublicShareNotFound, ShockerNotFound
24+
[ProducesResponseType<OpenShockProblem>(StatusCodes.Status409Conflict, MediaTypeNames.Application.ProblemJson)] // ShockerAlreadyInPublicShare
25+
public async Task<IActionResult> AddShocker([FromRoute] Guid publicShareId, [FromRoute] Guid shockerId)
2626
{
27-
var exists = await _db.ShockerShareLinks.AnyAsync(x => x.OwnerId == CurrentUser.Id && x.Id == shareLinkId);
28-
if (!exists) return Problem(ShareLinkError.ShareLinkNotFound);
27+
var exists = await _db.PublicShares.AnyAsync(x => x.OwnerId == CurrentUser.Id && x.Id == publicShareId);
28+
if (!exists) return Problem(PublicShareError.PublicShareNotFound);
2929

3030
var ownShocker =
3131
await _db.Shockers.AnyAsync(x => x.Id == shockerId && x.Device.OwnerId == CurrentUser.Id);
3232
if (!ownShocker) return Problem(ShockerError.ShockerNotFound);
3333

34-
if (await _db.ShockerShareLinkShockers.AnyAsync(x => x.ShareLinkId == shareLinkId && x.ShockerId == shockerId))
35-
return Problem(ShareLinkError.ShockerAlreadyInShareLink);
34+
if (await _db.PublicShareShockers.AnyAsync(x => x.PublicShareId == publicShareId && x.ShockerId == shockerId))
35+
return Problem(PublicShareError.ShockerAlreadyInPublicShare);
3636

37-
_db.ShockerShareLinkShockers.Add(new ShockerShareLinkShocker
37+
_db.PublicShareShockers.Add(new PublicShareShocker
3838
{
3939
ShockerId = shockerId,
40-
ShareLinkId = shareLinkId,
40+
PublicShareId = publicShareId,
4141
AllowShock = true,
4242
AllowVibrate = true,
4343
AllowSound = true,

API/Controller/Shares/Links/CreateShareLink.cs renamed to API/Controller/Shares/Links/CreatePublicShare.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,20 @@ namespace OpenShock.API.Controller.Shares.Links;
88
public sealed partial class ShareLinksController
99
{
1010
/// <summary>
11-
/// Create a new share link
11+
/// Create a new public share
1212
/// </summary>
13-
/// <response code="200">The created share link</response>
14-
[HttpPost(Name = "CreateShareLink")]
15-
public async Task<LegacyDataResponse<Guid>> CreateShareLink([FromBody] ShareLinkCreate body)
13+
/// <response code="200">The created public share</response>
14+
[HttpPost(Name = "CreatePublicShare")]
15+
public async Task<LegacyDataResponse<Guid>> CreatePublicShare([FromBody] PublicShareCreate body)
1616
{
17-
var entity = new ShockerShareLink
17+
var entity = new PublicShare
1818
{
1919
Id = Guid.CreateVersion7(),
2020
Owner = CurrentUser,
2121
ExpiresAt = body.ExpiresOn == null ? null : DateTime.SpecifyKind(body.ExpiresOn.Value, DateTimeKind.Utc),
2222
Name = body.Name
2323
};
24-
_db.ShockerShareLinks.Add(entity);
24+
_db.PublicShares.Add(entity);
2525
await _db.SaveChangesAsync();
2626

2727
return new(entity.Id);

API/Controller/Shares/Links/DeleteShareLink.cs renamed to API/Controller/Shares/Links/DeletePublicShare.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,23 @@ namespace OpenShock.API.Controller.Shares.Links;
1111
public sealed partial class ShareLinksController
1212
{
1313
/// <summary>
14-
/// Deletes a share link
14+
/// Deletes a public share
1515
/// </summary>
16-
/// <param name="shareLinkId"></param>
17-
/// <response code="200">Deleted share link</response>
18-
/// <response code="404">Share link not found or does not belong to you</response>
19-
[HttpDelete("{shareLinkId}")]
16+
/// <param name="publicShareId"></param>
17+
/// <response code="200">Deleted public share</response>
18+
/// <response code="404">Public share not found or does not belong to you</response>
19+
[HttpDelete("{publicShareId}")]
2020
[ProducesResponseType<LegacyEmptyResponse>(StatusCodes.Status200OK, MediaTypeNames.Application.Json)]
21-
[ProducesResponseType<OpenShockProblem>(StatusCodes.Status404NotFound, MediaTypeNames.Application.ProblemJson)] // ShareLinkNotFound
22-
public async Task<IActionResult> DeleteShareLink([FromRoute] Guid shareLinkId)
21+
[ProducesResponseType<OpenShockProblem>(StatusCodes.Status404NotFound, MediaTypeNames.Application.ProblemJson)] // PublicShareNotFound
22+
public async Task<IActionResult> DeletePublicShare([FromRoute] Guid publicShareId)
2323
{
24-
var result = await _db.ShockerShareLinks
25-
.Where(x => x.Id == shareLinkId)
24+
var result = await _db.PublicShares
25+
.Where(x => x.Id == publicShareId)
2626
.WhereIsUserOrPrivileged(x => x.Owner, CurrentUser)
2727
.ExecuteDeleteAsync();
2828

2929
return result > 0
30-
? LegacyEmptyOk("Deleted share link")
31-
: Problem(ShareLinkError.ShareLinkNotFound);
30+
? LegacyEmptyOk("Deleted public share")
31+
: Problem(PublicShareError.PublicShareNotFound);
3232
}
3333
}

API/Controller/Shares/Links/EditShockerShareLink.cs renamed to API/Controller/Shares/Links/EditShocker.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,26 @@ namespace OpenShock.API.Controller.Shares.Links;
1212
public sealed partial class ShareLinksController
1313
{
1414
/// <summary>
15-
/// Edit a shocker in a share link
15+
/// Edit a shocker in a public share
1616
/// </summary>
17-
/// <param name="shareLinkId"></param>
17+
/// <param name="publicShareId"></param>
1818
/// <param name="shockerId"></param>
1919
/// <param name="body"></param>
2020
/// <response code="200">Successfully updated shocker</response>
21-
/// <response code="404">Share link or shocker does not exist</response>
22-
/// <response code="400">Shocker does not exist in share link</response>
23-
[HttpPatch("{shareLinkId}/{shockerId}")]
24-
[ProducesResponseType<LegacyDataResponse<ShareLinkResponse>>(StatusCodes.Status200OK, MediaTypeNames.Application.Json)]
25-
[ProducesResponseType<OpenShockProblem>(StatusCodes.Status404NotFound, MediaTypeNames.Application.ProblemJson)] // ShareLinkNotFound, ShockerNotInShareLink
26-
public async Task<IActionResult> EditShocker([FromRoute] Guid shareLinkId, [FromRoute] Guid shockerId, [FromBody] ShareLinkEditShocker body)
21+
/// <response code="404">Public share or shocker does not exist</response>
22+
/// <response code="400">Shocker does not exist in public share</response>
23+
[HttpPatch("{publicShareId}/{shockerId}")]
24+
[ProducesResponseType<LegacyDataResponse<PublicShareResponse>>(StatusCodes.Status200OK, MediaTypeNames.Application.Json)]
25+
[ProducesResponseType<OpenShockProblem>(StatusCodes.Status404NotFound, MediaTypeNames.Application.ProblemJson)] // PublicShareNotFound, ShockerNotInPublicShare
26+
public async Task<IActionResult> EditShocker([FromRoute] Guid publicShareId, [FromRoute] Guid shockerId, [FromBody] PublicShareEditShocker body)
2727
{
28-
var exists = await _db.ShockerShareLinks.AnyAsync(x => x.OwnerId == CurrentUser.Id && x.Id == shareLinkId);
29-
if (!exists) return Problem(ShareLinkError.ShareLinkNotFound);
28+
var exists = await _db.PublicShares.AnyAsync(x => x.OwnerId == CurrentUser.Id && x.Id == publicShareId);
29+
if (!exists) return Problem(PublicShareError.PublicShareNotFound);
3030

3131
var shocker =
32-
await _db.ShockerShareLinkShockers.FirstOrDefaultAsync(x =>
33-
x.ShareLinkId == shareLinkId && x.ShockerId == shockerId);
34-
if (shocker == null) return Problem(ShareLinkError.ShockerNotInShareLink);
32+
await _db.PublicShareShockers.FirstOrDefaultAsync(x =>
33+
x.PublicShareId == publicShareId && x.ShockerId == shockerId);
34+
if (shocker == null) return Problem(PublicShareError.ShockerNotInPublicShare);
3535

3636
shocker.AllowShock = body.Permissions.Shock;
3737
shocker.AllowVibrate = body.Permissions.Vibrate;

API/Controller/Shares/Links/ListShareLinks.cs renamed to API/Controller/Shares/Links/List.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,17 @@ namespace OpenShock.API.Controller.Shares.Links;
88
public sealed partial class ShareLinksController
99
{
1010
/// <summary>
11-
/// Get all share links for the current user
11+
/// Get all public shares for the current user
1212
/// </summary>
13-
/// <response code="200">All share links for the current user</response>
13+
/// <response code="200">All public shares for the current user</response>
1414
[HttpGet]
15-
public LegacyDataResponse<IAsyncEnumerable<ShareLinkResponse>> List()
15+
public LegacyDataResponse<IAsyncEnumerable<OwnPublicShareResponse>> List()
1616
{
17-
var ownShareLinks = _db.ShockerShareLinks
17+
var ownPublicShares = _db.PublicShares
1818
.Where(x => x.OwnerId == CurrentUser.Id)
19-
.Select(x => ShareLinkResponse.GetFromEf(x))
19+
.Select(x => OwnPublicShareResponse.GetFromEf(x))
2020
.AsAsyncEnumerable();
2121

22-
return new(ownShareLinks);
22+
return new(ownPublicShares);
2323
}
2424
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using Microsoft.AspNetCore.Mvc;
2+
using Microsoft.EntityFrameworkCore;
3+
using OpenShock.API.Models.Requests;
4+
using OpenShock.API.Utils;
5+
using OpenShock.Common.Models;
6+
using System.Net.Mime;
7+
using OpenShock.Common.Errors;
8+
using OpenShock.Common.Problems;
9+
10+
namespace OpenShock.API.Controller.Shares.Links;
11+
12+
public sealed partial class ShareLinksController
13+
{
14+
/// <summary>
15+
/// Pause a shocker in a public share
16+
/// </summary>
17+
/// <param name="publicShareId"></param>
18+
/// <param name="shockerId"></param>
19+
/// <param name="body"></param>
20+
/// <response code="200">Successfully updated paused state shocker</response>
21+
/// <response code="404">Public share or shocker does not exist</response>
22+
/// <response code="400">Shocker does not exist in public share</response>
23+
[HttpPost("{publicShareId}/{shockerId}/pause")]
24+
[ProducesResponseType<LegacyDataResponse<PauseReason>>(StatusCodes.Status200OK, MediaTypeNames.Application.Json)]
25+
[ProducesResponseType<OpenShockProblem>(StatusCodes.Status404NotFound, MediaTypeNames.Application.ProblemJson)] // PublicShareNotFound, ShockerNotInPublicShare
26+
public async Task<IActionResult> PauseShocker([FromRoute] Guid publicShareId, [FromRoute] Guid shockerId, [FromBody] PauseRequest body)
27+
{
28+
var exists = await _db.PublicShares.AnyAsync(x => x.OwnerId == CurrentUser.Id && x.Id == publicShareId);
29+
if (!exists) return Problem(PublicShareError.PublicShareNotFound);
30+
31+
var shocker =
32+
await _db.PublicShareShockers.Where(x =>
33+
x.PublicShareId == publicShareId && x.ShockerId == shockerId).Include(x => x.Shocker).FirstOrDefaultAsync();
34+
if (shocker == null) return Problem(PublicShareError.ShockerNotInPublicShare);
35+
36+
shocker.IsPaused = body.Pause;
37+
await _db.SaveChangesAsync();
38+
39+
return LegacyDataOk(PublicShareUtils.GetPausedReason(shocker.IsPaused, shocker.Shocker.IsPaused));
40+
}
41+
}

API/Controller/Shares/Links/PauseShockerShareLink.cs

Lines changed: 0 additions & 41 deletions
This file was deleted.

API/Controller/Shares/Links/DeleteShockerShareLink.cs renamed to API/Controller/Shares/Links/RemoveShocker.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,33 +11,33 @@ namespace OpenShock.API.Controller.Shares.Links;
1111
public sealed partial class ShareLinksController
1212
{
1313
/// <summary>
14-
/// Remove a shocker from a share link
14+
/// Remove a shocker from a public share
1515
/// </summary>
16-
/// <param name="shareLinkId"></param>
16+
/// <param name="publicShareId"></param>
1717
/// <param name="shockerId"></param>
1818
/// <response code="200">Successfully removed shocker</response>
19-
/// <response code="404">Share link or shocker does not exist</response>
20-
/// <response code="400">Shocker does not exist in share link</response>
21-
[HttpDelete("{shareLinkId}/{shockerId}")]
19+
/// <response code="404">Public share or shocker does not exist</response>
20+
/// <response code="400">Shocker does not exist in public share</response>
21+
[HttpDelete("{publicShareId}/{shockerId}")]
2222
[ProducesResponseType<LegacyEmptyResponse>(StatusCodes.Status200OK, MediaTypeNames.Application.Json)]
23-
[ProducesResponseType<OpenShockProblem>(StatusCodes.Status404NotFound, MediaTypeNames.Application.ProblemJson)] // ShareLinkNotFound, ShockerNotInShareLink
24-
public async Task<IActionResult> RemoveShocker([FromRoute] Guid shareLinkId, [FromRoute] Guid shockerId)
23+
[ProducesResponseType<OpenShockProblem>(StatusCodes.Status404NotFound, MediaTypeNames.Application.ProblemJson)] // PublicShareNotFound, ShockerNotInPublicShare
24+
public async Task<IActionResult> RemoveShocker([FromRoute] Guid publicShareId, [FromRoute] Guid shockerId)
2525
{
26-
var exists = await _db.ShockerShareLinks
27-
.Where(x => x.Id == shareLinkId)
26+
var exists = await _db.PublicShares
27+
.Where(x => x.Id == publicShareId)
2828
.WhereIsUserOrPrivileged(x => x.Owner, CurrentUser)
2929
.AnyAsync();
3030
if (!exists)
3131
{
32-
return Problem(ShareLinkError.ShareLinkNotFound);
32+
return Problem(PublicShareError.PublicShareNotFound);
3333
}
3434

35-
var affected = await _db.ShockerShareLinkShockers
36-
.Where(x => x.ShareLinkId == shareLinkId && x.ShockerId == shockerId)
35+
var affected = await _db.PublicShareShockers
36+
.Where(x => x.PublicShareId == publicShareId && x.ShockerId == shockerId)
3737
.ExecuteDeleteAsync();
3838
if (affected <= 0)
3939
{
40-
return Problem(ShareLinkError.ShockerNotInShareLink);
40+
return Problem(PublicShareError.ShockerNotInPublicShare);
4141
}
4242

4343
return LegacyEmptyOk($"Successfully removed {affected} {(affected == 1 ? "shocker" : "shockers")}");

0 commit comments

Comments
 (0)