Compare commits

17 Commits

Author SHA1 Message Date
d4ae137115 Merge pull request 'Use current datetime for validation' (#17) from main into production
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #17
2025-10-16 18:27:37 +02:00
9f51f508ce Merge pull request 'Always use current datetime for validation' (#16) from fix/stale-datetime-validation into main
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
Reviewed-on: #16
2025-10-16 18:23:44 +02:00
62824549fc Always use current datetime for validation
Some checks failed
continuous-integration/drone/push Build was killed
continuous-integration/drone/pr Build is passing
2025-10-16 18:21:14 +02:00
0cb5e44f7a Merge pull request 'main' (#15) from main into production
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #15
2025-10-16 17:54:03 +02:00
7d7f5750e3 Merge pull request 'Fix bash syntax for creating a variable' (#14) from fix/pipeline into main
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
Reviewed-on: #14
2025-10-16 17:51:33 +02:00
789ba35c60 Fix bash syntax for creating a variable
Some checks failed
continuous-integration/drone/push Build was killed
continuous-integration/drone/pr Build is passing
2025-10-16 17:48:05 +02:00
1226c42f19 Merge pull request 'Echo docker image with tag in pipeline' (#13) from feature/docker-image-echoed-in-pipeline into main
Some checks failed
continuous-integration/drone/push Build is failing
Reviewed-on: #13
2025-10-16 17:41:32 +02:00
5e083aeaf6 Echo docker image with tag in pipeline
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2025-10-16 17:36:15 +02:00
31efd6b4ad Merge pull request 'Prod: Better debug create consumption error due to datetime' (#12) from main into production
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #12
2025-10-16 17:33:53 +02:00
69bb19e4eb Merge pull request 'Better debug date time error when creating a consumptions' (#11) from fix/bad-request-due-to-date into main
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
Reviewed-on: #11
2025-10-16 17:28:43 +02:00
db791a1183 Add endpoint to query the system's current time
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2025-10-16 17:23:47 +02:00
f248be4e1f Merge pull request 'Seq API Key support and package updates' (#10) from prepare-for-prod into production
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #10
2025-09-21 11:52:08 +02:00
67d29333d9 Merge branch 'production' into prepare-for-prod
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
# Conflicts:
#	.drone.yml
2025-09-21 11:48:42 +02:00
c57972d9a6 Docker push and build for production branch as well
All checks were successful
continuous-integration/drone/push Build is passing
2025-08-19 18:59:01 +02:00
ea019ebfa6 Merge pull request '[PROD] Add seq support' (#7) from main into production
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #7
2025-08-19 18:56:10 +02:00
66c23ffb4f Merge pull request 'Use full type as log category' (#5) from main into production
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #5
2025-07-21 21:42:57 +02:00
00e0869a13 Merge pull request '[Prod] More logging' (#4) from main into production
Some checks failed
continuous-integration/drone/push Build is failing
Reviewed-on: #4
2025-07-21 21:25:21 +02:00
7 changed files with 64 additions and 8 deletions

View File

@@ -42,9 +42,11 @@ steps:
- name: docker build and push - name: docker build and push
image: docker:24.0.7 image: docker:24.0.7
commands: commands:
- docker build . -t $docker_registry$docker_repo:$DRONE_BRANCH - dockerImageWithTag="$docker_registry$docker_repo:$DRONE_BRANCH"
- docker build . -t $dockerImageWithTag
- echo $docker_password | docker login --username $docker_username --password-stdin $docker_registry - echo $docker_password | docker login --username $docker_username --password-stdin $docker_registry
- docker push $docker_registry$docker_repo:$DRONE_BRANCH - docker push $dockerImageWithTag
- echo "Built and pushed $dockerImageWithTag"
environment: environment:
docker_username: docker_username:
from_secret: docker_username from_secret: docker_username

View File

@@ -26,13 +26,13 @@ public static class CreateConsumption
{ {
public Validator(TimeProvider timeProvider) public Validator(TimeProvider timeProvider)
{ {
DateTime todayEndOfDay = timeProvider.GetUtcNow() Func<DateTimeOffset> getTodayEndOfDay = () => timeProvider.GetUtcNow()
.Date .Date
.AddDays(1) .AddDays(1)
.AddTicks(-1); .AddTicks(-1);
RuleFor(x => x.DateTime.ToUniversalTime()) RuleFor(x => x.DateTime.ToUniversalTime())
.LessThanOrEqualTo(todayEndOfDay) .LessThanOrEqualTo(_ => getTodayEndOfDay())
.WithName(nameof(Request.DateTime)); .WithName(nameof(Request.DateTime));
RuleFor(x => x.Distance) RuleFor(x => x.Distance)

View File

@@ -26,13 +26,13 @@ public static class UpdateConsumption
{ {
public Validator(TimeProvider timeProvider) public Validator(TimeProvider timeProvider)
{ {
DateTime todayEndOfDay = timeProvider.GetUtcNow() Func<DateTimeOffset> getTodayEndOfDay = () => timeProvider.GetUtcNow()
.Date .Date
.AddDays(1) .AddDays(1)
.AddTicks(-1); .AddTicks(-1);
RuleFor(x => x.DateTime.ToUniversalTime()) RuleFor(x => x.DateTime.ToUniversalTime())
.LessThanOrEqualTo(todayEndOfDay) .LessThanOrEqualTo(_ => getTodayEndOfDay())
.WithName(nameof(Request.DateTime)); .WithName(nameof(Request.DateTime));
RuleFor(x => x.Distance) RuleFor(x => x.Distance)

View File

@@ -41,5 +41,6 @@ public static class EndpointExtensions
.RequireAuthorization(Constants.Authorization.RequireAuthenticatedUserPolicy); .RequireAuthorization(Constants.Authorization.RequireAuthenticatedUserPolicy);
GetServerInfo.MapEndpoint(versionedApis); GetServerInfo.MapEndpoint(versionedApis);
GetCurrentTime.MapEndpoint(versionedApis);
} }
} }

View File

@@ -0,0 +1,21 @@
using Microsoft.AspNetCore.Http.HttpResults;
namespace Vegasco.Server.Api.Info;
public static class GetCurrentTime
{
public record Response(DateTimeOffset CurrentTime);
public static RouteHandlerBuilder MapEndpoint(IEndpointRouteBuilder builder)
{
return builder
.MapGet("info/time", Endpoint)
.WithTags("Info");
}
private static Ok<Response> Endpoint(
TimeProvider timeProvider)
{
return TypedResults.Ok(new Response(timeProvider.GetUtcNow()));
}
}

View File

@@ -2,7 +2,7 @@
namespace Vegasco.Server.Api.Info; namespace Vegasco.Server.Api.Info;
public class GetServerInfo public static class GetServerInfo
{ {
public record Response( public record Response(
string FullVersion, string FullVersion,

View File

@@ -0,0 +1,32 @@
using FluentAssertions;
using FluentAssertions.Extensions;
using System.Net.Http.Json;
using Vegasco.Server.Api.Info;
namespace Vegasco.Server.Api.Tests.Integration.Info;
[Collection(SharedTestCollection.Name)]
public sealed class GetCurrentTimeTests
{
private readonly WebAppFactory _factory;
public GetCurrentTimeTests(WebAppFactory factory)
{
_factory = factory;
}
[Fact]
public async Task GetServerInfo_ShouldReturnServerInfo_WhenCalled()
{
// Arrange
// Act
using HttpResponseMessage response = await _factory.HttpClient.GetAsync("/v1/info/time");
// Assert
response.IsSuccessStatusCode.Should().BeTrue();
GetCurrentTime.Response? timeInfo = await response.Content.ReadFromJsonAsync<GetCurrentTime.Response>();
timeInfo.Should().NotBeNull();
timeInfo.CurrentTime.Should().BeCloseTo(DateTimeOffset.UtcNow, TimeSpan.FromSeconds(10));
}
}