Compare commits

..

10 Commits

37 changed files with 103 additions and 113 deletions

@ -12,7 +12,7 @@ indent_style = space
tab_width = 4 tab_width = 4
# Предпочтения для новых строк # Предпочтения для новых строк
end_of_line = crlf end_of_line = unset
insert_final_newline = false insert_final_newline = false
#### Действия кода .NET #### #### Действия кода .NET ####
@ -244,7 +244,7 @@ dotnet_naming_style.begins_with_i.capitalization = pascal_case
dotnet_style_operator_placement_when_wrapping = beginning_of_line dotnet_style_operator_placement_when_wrapping = beginning_of_line
tab_width = 4 tab_width = 4
indent_size = 4 indent_size = 4
end_of_line = crlf end_of_line = unset
dotnet_style_coalesce_expression = true:suggestion dotnet_style_coalesce_expression = true:suggestion
dotnet_style_null_propagation = true:suggestion dotnet_style_null_propagation = true:suggestion
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion

@ -1,29 +0,0 @@
name: .NET Test Pipeline
on:
pull_request:
push:
branches:
[master, 'release/*']
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
- name: Restore dependencies
run: dotnet restore
- name: Build the solution
run: dotnet build --configuration Release
- name: Run tests
run: dotnet test --configuration Release --no-build --no-restore --verbosity normal

30
.github/workflows/code-analyze.yaml vendored Normal file

@ -0,0 +1,30 @@
name: .NET Test Pipeline
on:
push:
branches:
- master
pull_request:
types: [opened, synchronize, reopened]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checking out
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: SonarScanner for .NET 8 with pull request decoration support
uses: highbyte/sonarscan-dotnet@v2.3.3
with:
sonarProjectKey: $(echo "${{ github.repository }}" | cut -d'/' -f2)
sonarProjectName: $(echo "${{ github.repository }}" | cut -d'/' -f2)
sonarHostname: ${{ secrets.SONAR_HOST_URL }}
dotnetPreBuildCmd: dotnet nuget add source --name="Winsomnia" --username ${{ secrets.NUGET_USERNAME }} --password ${{ secrets.NUGET_PASSWORD }} --store-password-in-clear-text ${{ secrets.NUGET_ADDRESS }} && dotnet format --verify-no-changes --diagnostics -v diag --severity warn
dotnetTestArguments: --logger trx --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=opencover
sonarBeginArguments: /d:sonar.cs.opencover.reportsPaths="**/TestResults/**/coverage.opencover.xml" -d:sonar.cs.vstest.reportsPaths="**/TestResults/*.trx"
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

@ -3,7 +3,7 @@
on: on:
push: push:
branches: branches:
[master, 'release/*'] [master]
jobs: jobs:
build-and-deploy: build-and-deploy:
@ -24,7 +24,7 @@ jobs:
- name: Build and push Docker image - name: Build and push Docker image
run: | run: |
docker build --build-arg NUGET_USERNAME=${{ secrets.NUGET_USERNAME }} --build-arg NUGET_PASSWORD=${{ secrets.NUGET_PASSWORD }} -t ${{ secrets.DOCKER_USERNAME }}/mirea-backend:latest . docker build --build-arg NUGET_USERNAME=${{ secrets.NUGET_USERNAME }} --build-arg NUGET_PASSWORD=${{ secrets.NUGET_PASSWORD }} --build-arg NUGET_ADDRESS=${{ secrets.NUGET_ADDRESS }} -t ${{ secrets.DOCKER_USERNAME }}/mirea-backend:latest .
docker push ${{ secrets.DOCKER_USERNAME }}/mirea-backend:latest docker push ${{ secrets.DOCKER_USERNAME }}/mirea-backend:latest
- name: Start ssh-agent - name: Start ssh-agent

@ -19,4 +19,4 @@ public enum OAuthProvider
/// OAuth provider for Mail.ru. /// OAuth provider for Mail.ru.
/// </summary> /// </summary>
MailRu MailRu
} }

@ -29,4 +29,4 @@ public class PasswordPolicy
/// Gets or sets a value indicating whether at least one special character is required in the password. /// Gets or sets a value indicating whether at least one special character is required in the password.
/// </summary> /// </summary>
public bool RequireSpecialCharacter { get; set; } public bool RequireSpecialCharacter { get; set; }
} }

@ -14,4 +14,4 @@ public enum TwoFactorAuthentication
/// TOTP (Time-based One-Time Password) is required for additional verification. /// TOTP (Time-based One-Time Password) is required for additional verification.
/// </summary> /// </summary>
TotpRequired, TotpRequired,
} }

@ -27,4 +27,4 @@ public class CreateUserRequest
[Required] [Required]
[MinLength(2)] [MinLength(2)]
public required string Password { get; set; } public required string Password { get; set; }
} }

@ -34,4 +34,4 @@ public class ScheduleRequest
/// Gets or sets an array of lesson type IDs. /// Gets or sets an array of lesson type IDs.
/// </summary> /// </summary>
public int[]? LessonType { get; set; } = null; public int[]? LessonType { get; set; } = null;
} }

@ -28,4 +28,4 @@ public class CampusDetailsResponse
/// Gets or sets the address of the campus (optional). /// Gets or sets the address of the campus (optional).
/// </summary> /// </summary>
public string? Address { get; set; } public string? Address { get; set; }
} }

@ -114,4 +114,4 @@ public class ScheduleResponse
/// Gets or sets the links to online meetings for the schedule entry. /// Gets or sets the links to online meetings for the schedule entry.
/// </summary> /// </summary>
public required IEnumerable<string?> LinkToMeet { get; set; } public required IEnumerable<string?> LinkToMeet { get; set; }
} }

@ -12,11 +12,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Elements of the solution",
.env = .env .env = .env
.gitattributes = .gitattributes .gitattributes = .gitattributes
.gitignore = .gitignore .gitignore = .gitignore
.gitea\workflows\deploy-stage.yaml = .gitea\workflows\deploy-stage.yaml .github\workflows\code-analyze.yaml = .github\workflows\code-analyze.yaml
Dockerfile = Dockerfile Dockerfile = Dockerfile
LICENSE.txt = LICENSE.txt LICENSE.txt = LICENSE.txt
README.md = README.md README.md = README.md
.gitea\workflows\test.yaml = .gitea\workflows\test.yaml .github\workflows\release-version.yml = .github\workflows\release-version.yml
EndProjectSection EndProjectSection
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ApiDto", "ApiDto\ApiDto.csproj", "{0335FA36-E137-453F-853B-916674C168FE}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ApiDto", "ApiDto\ApiDto.csproj", "{0335FA36-E137-453F-853B-916674C168FE}"

@ -1,4 +1,4 @@
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
LABEL company="Winsomnia" LABEL company="Winsomnia"
LABEL maintainer.name="Wesser" maintainer.email="support@winsomnia.net" LABEL maintainer.name="Wesser" maintainer.email="support@winsomnia.net"
WORKDIR /app WORKDIR /app
@ -13,10 +13,14 @@ COPY . .
ARG NUGET_USERNAME ARG NUGET_USERNAME
ARG NUGET_PASSWORD ARG NUGET_PASSWORD
ARG NUGET_ADDRESS
ENV NUGET_USERNAME=$NUGET_USERNAME ENV NUGET_USERNAME=$NUGET_USERNAME
ENV NUGET_PASSWORD=$NUGET_PASSWORD ENV NUGET_PASSWORD=$NUGET_PASSWORD
ENV NUGET_ADDRESS=$NUGET_ADDRESS
RUN dotnet restore ./Backend.sln --configfile nuget.config RUN dotnet nuget add source --name="Winsomnia" --username ${NUGET_USERNAME} --store-password-in-clear-text --password ${NUGET_PASSWORD} ${NUGET_ADDRESS}
RUN dotnet restore ./Backend.sln
WORKDIR /app WORKDIR /app
WORKDIR /src WORKDIR /src
RUN dotnet publish ./Endpoint/Endpoint.csproj -c Release --self-contained false -p:PublishSingleFile=false -o /app RUN dotnet publish ./Endpoint/Endpoint.csproj -c Release --self-contained false -p:PublishSingleFile=false -o /app

@ -16,4 +16,4 @@ public static class CronUpdateSkipConverter
}).ToList(); }).ToList();
public static List<ScheduleSettings.CronUpdateSkip> ConvertFromDto(this IEnumerable<Dto.Common.CronUpdateSkip> pairPeriod) => public static List<ScheduleSettings.CronUpdateSkip> ConvertFromDto(this IEnumerable<Dto.Common.CronUpdateSkip> pairPeriod) =>
pairPeriod.Select(x => x.Get()).ToList(); pairPeriod.Select(x => x.Get()).ToList();
} }

@ -11,4 +11,4 @@ public static class PairPeriodTimeConverter
public static Dictionary<int, ScheduleSettings.PairPeriodTime> ConvertFromDto(this IDictionary<int, Dto.Common.PairPeriodTime> pairPeriod) => public static Dictionary<int, ScheduleSettings.PairPeriodTime> ConvertFromDto(this IDictionary<int, Dto.Common.PairPeriodTime> pairPeriod) =>
pairPeriod.ToDictionary(kvp => kvp.Key, kvp => new ScheduleSettings.PairPeriodTime(kvp.Value.Start, kvp.Value.End)); pairPeriod.ToDictionary(kvp => kvp.Key, kvp => new ScheduleSettings.PairPeriodTime(kvp.Value.Start, kvp.Value.End));
} }

@ -37,7 +37,7 @@ public static class CronUpdateSkipService
.OrderBy(x => x.End ?? x.Date) .OrderBy(x => x.End ?? x.Date)
.ToList(); .ToList();
} }
public static List<DateTimeOffset> GetNextTask(this List<ScheduleSettings.CronUpdateSkip> data, public static List<DateTimeOffset> GetNextTask(this List<ScheduleSettings.CronUpdateSkip> data,
CronExpression expression, int depth = 1, DateOnly? currentDate = null) CronExpression expression, int depth = 1, DateOnly? currentDate = null)
@ -45,32 +45,31 @@ public static class CronUpdateSkipService
if (depth <= 0) if (depth <= 0)
return []; return [];
currentDate ??= DateOnly.FromDateTime(DateTime.UtcNow); DateTimeOffset nextRunTime = (currentDate?.ToDateTime(TimeOnly.MinValue) ?? DateTime.Now).ToUniversalTime();
DateTimeOffset nextRunTime = currentDate.Value.ToDateTime(new TimeOnly(0, 0, 0));
List<DateTimeOffset> result = []; List<DateTimeOffset> result = [];
do do
{ {
var lastSkip = data.FilterDateEntry(nextRunTime.DateTime).LastOrDefault(); var lastSkippedEntry = data.FilterDateEntry(nextRunTime.DateTime).LastOrDefault();
if (lastSkip is { Start: not null, End: not null }) if (lastSkippedEntry is { Start: not null, End: not null })
nextRunTime = new DateTimeOffset(lastSkip.End.Value.AddDays(1), new TimeOnly(0, 0, 0), TimeSpan.Zero); nextRunTime = lastSkippedEntry.End.Value.ToDateTime(TimeOnly.MinValue).AddDays(1);
else if (lastSkip.Date.HasValue) else if (lastSkippedEntry.Date.HasValue)
nextRunTime = new DateTimeOffset(lastSkip.Date.Value.AddDays(1), new TimeOnly(0, 0, 0), TimeSpan.Zero); nextRunTime = lastSkippedEntry.Date.Value.ToDateTime(TimeOnly.MinValue).AddDays(1);
var next = expression.GetNextOccurrence(nextRunTime, TimeZoneInfo.Local); var nextOccurrence = expression.GetNextOccurrence(nextRunTime.AddMinutes(-1), TimeZoneInfo.Local);
if (!next.HasValue) if (!nextOccurrence.HasValue)
return result; return result;
nextRunTime = next.Value; if (data.FilterDateEntry(nextOccurrence.Value.DateTime).Count != 0)
{
if (data.FilterDateEntry(nextRunTime.DateTime).Any()) nextRunTime = nextOccurrence.Value.AddDays(1);
continue; continue;
}
result.Add(nextRunTime); result.Add(nextOccurrence.Value.ToLocalTime());
nextRunTime = nextRunTime.AddMinutes(1); nextRunTime = nextOccurrence.Value.AddMinutes(1);
} while (result.Count < depth); } while (result.Count < depth);

@ -64,4 +64,4 @@ public static class JwtConfiguration
}; };
}); });
} }
} }

@ -99,4 +99,4 @@ public static class LoggerConfiguration
}; };
}); });
} }
} }

@ -2,4 +2,4 @@
public interface ISaveSettings public interface ISaveSettings
{ {
void SaveSetting(); void SaveSetting();
} }

@ -4,6 +4,8 @@ using Microsoft.Extensions.Options;
using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen; using Swashbuckle.AspNetCore.SwaggerGen;
using System; using System;
using System.Diagnostics;
using System.Reflection;
namespace Mirea.Api.Endpoint.Configuration.SwaggerOptions; namespace Mirea.Api.Endpoint.Configuration.SwaggerOptions;
@ -19,7 +21,7 @@ public class ConfigureSwaggerOptions(IApiVersionDescriptionProvider provider) :
{ {
var info = new OpenApiInfo() var info = new OpenApiInfo()
{ {
Title = "MIREA Schedule Web API", Title = $"MIREA Schedule Web API ({FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).ProductVersion})",
Version = description.ApiVersion.ToString(), Version = description.ApiVersion.ToString(),
Description = "This API provides a convenient interface for retrieving data stored in the database. " + Description = "This API provides a convenient interface for retrieving data stored in the database. " +
"Special attention was paid to the lightweight and easy transfer of all necessary data. Made by the Winsomnia team.", "Special attention was paid to the lightweight and easy transfer of all necessary data. Made by the Winsomnia team.",

@ -315,4 +315,4 @@ public class AuthController(IOptionsSnapshot<Admin> user, IOptionsSnapshot<Gener
return Ok(password); return Ok(password);
} }
} }

@ -203,10 +203,10 @@ public class ScheduleController(ILogger<ScheduleController> logger, IOptionsSnap
{ {
try try
{ {
using var scope = scopeFactory.CreateScope(); using var scope = scopeFactory.CreateScope();
var sync = (ScheduleSynchronizer)ActivatorUtilities.GetServiceOrCreateInstance(scope.ServiceProvider, typeof(ScheduleSynchronizer)); var sync = (ScheduleSynchronizer)ActivatorUtilities.GetServiceOrCreateInstance(scope.ServiceProvider, typeof(ScheduleSynchronizer));
await sync.StartSync(filePaths, CancellationToken.None); await sync.StartSync(filePaths, CancellationToken.None);
} }
catch (Exception ex) catch (Exception ex)
{ {

@ -5,20 +5,17 @@
<ImplicitUsings>disable</ImplicitUsings> <ImplicitUsings>disable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Company>Winsomnia</Company> <Company>Winsomnia</Company>
<Version>1.0-rc7</Version> <Version>1.0.0</Version>
<AssemblyVersion>1.0.2.7</AssemblyVersion> <AssemblyVersion>1.0.3.0</AssemblyVersion>
<FileVersion>1.0.2.7</FileVersion> <FileVersion>1.0.3.0</FileVersion>
<AssemblyName>Mirea.Api.Endpoint</AssemblyName> <AssemblyName>Mirea.Api.Endpoint</AssemblyName>
<RootNamespace>$(AssemblyName)</RootNamespace> <RootNamespace>$(AssemblyName)</RootNamespace>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<InvariantGlobalization>false</InvariantGlobalization> <InvariantGlobalization>false</InvariantGlobalization>
<UserSecretsId>65cea060-88bf-4e35-9cfb-18fc996a8f05</UserSecretsId>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<DockerfileContext>.</DockerfileContext>
<SignAssembly>False</SignAssembly>
<GenerateDocumentationFile>True</GenerateDocumentationFile> <GenerateDocumentationFile>True</GenerateDocumentationFile>
<DocumentationFile>docs.xml</DocumentationFile> <DocumentationFile>docs.xml</DocumentationFile>
<NoWarn>$(NoWarn);1591</NoWarn> <NoWarn>$(NoWarn);1591</NoWarn>
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@ -27,7 +24,7 @@
<PackageReference Include="AspNetCore.HealthChecks.Redis" Version="9.0.0" /> <PackageReference Include="AspNetCore.HealthChecks.Redis" Version="9.0.0" />
<PackageReference Include="AspNetCore.HealthChecks.System" Version="9.0.0" /> <PackageReference Include="AspNetCore.HealthChecks.System" Version="9.0.0" />
<PackageReference Include="Cronos" Version="0.9.0" /> <PackageReference Include="Cronos" Version="0.9.0" />
<PackageReference Include="EPPlus" Version="7.5.3" /> <PackageReference Include="EPPlus" Version="7.6.0" />
<PackageReference Include="HtmlAgilityPack" Version="1.11.72" /> <PackageReference Include="HtmlAgilityPack" Version="1.11.72" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.12" /> <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.12" />
<PackageReference Include="Microsoft.Build.Framework" Version="17.12.6" /> <PackageReference Include="Microsoft.Build.Framework" Version="17.12.6" />
@ -40,7 +37,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.1" /> <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.1" />
<PackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="8.3.1" /> <PackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="8.4.0" />
<PackageReference Include="Mirea.Tools.Schedule.Parser" Version="1.2.5" /> <PackageReference Include="Mirea.Tools.Schedule.Parser" Version="1.2.5" />
<PackageReference Include="Mirea.Tools.Schedule.WebParser" Version="1.0.6" /> <PackageReference Include="Mirea.Tools.Schedule.WebParser" Version="1.0.6" />
<PackageReference Include="QRCoder" Version="1.6.0" /> <PackageReference Include="QRCoder" Version="1.6.0" />
@ -63,7 +60,7 @@
<PackageReference Include="System.Composition.TypedParts" Version="9.0.1" /> <PackageReference Include="System.Composition.TypedParts" Version="9.0.1" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="9.0.1" /> <PackageReference Include="System.Configuration.ConfigurationManager" Version="9.0.1" />
<PackageReference Include="System.Drawing.Common" Version="9.0.1" /> <PackageReference Include="System.Drawing.Common" Version="9.0.1" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.3.1" /> <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.4.0" />
<PackageReference Include="System.Security.Cryptography.Pkcs" Version="9.0.1" /> <PackageReference Include="System.Security.Cryptography.Pkcs" Version="9.0.1" />
<PackageReference Include="System.ServiceProcess.ServiceController" Version="9.0.1" /> <PackageReference Include="System.ServiceProcess.ServiceController" Version="9.0.1" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="9.0.1" /> <PackageReference Include="System.Text.Encoding.CodePages" Version="9.0.1" />

@ -13,4 +13,4 @@ public interface ICacheService
Task<T?> GetAsync<T>(string key, CancellationToken cancellationToken = default); Task<T?> GetAsync<T>(string key, CancellationToken cancellationToken = default);
Task RemoveAsync(string key, CancellationToken cancellationToken = default); Task RemoveAsync(string key, CancellationToken cancellationToken = default);
} }

@ -26,4 +26,4 @@ public class CookieOptions
internal void DropCookie(HttpContext context, string name) => internal void DropCookie(HttpContext context, string name) =>
SetCookie(context, name, "", DateTimeOffset.MinValue); SetCookie(context, name, "", DateTimeOffset.MinValue);
} }

@ -5,9 +5,9 @@
<ImplicitUsings>disable</ImplicitUsings> <ImplicitUsings>disable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Company>Winsomnia</Company> <Company>Winsomnia</Company>
<Version>1.1.3</Version> <Version>1.0.0</Version>
<AssemblyVersion>1.1.3.3</AssemblyVersion> <AssemblyVersion>1.0.3.0</AssemblyVersion>
<FileVersion>1.1.3.3</FileVersion> <FileVersion>1.0.3.0</FileVersion>
<AssemblyName>Mirea.Api.Security</AssemblyName> <AssemblyName>Mirea.Api.Security</AssemblyName>
<RootNamespace>$(AssemblyName)</RootNamespace> <RootNamespace>$(AssemblyName)</RootNamespace>
<OutputType>Library</OutputType> <OutputType>Library</OutputType>

@ -5,9 +5,9 @@
<ImplicitUsings>disable</ImplicitUsings> <ImplicitUsings>disable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Company>Winsomnia</Company> <Company>Winsomnia</Company>
<Version>1.0.3</Version> <Version>1.0.0</Version>
<AssemblyVersion>1.0.3.3</AssemblyVersion> <AssemblyVersion>1.0.3.0</AssemblyVersion>
<FileVersion>1.0.3.3</FileVersion> <FileVersion>1.0.3.0</FileVersion>
<AssemblyName>Mirea.Api.DataAccess.Application</AssemblyName> <AssemblyName>Mirea.Api.DataAccess.Application</AssemblyName>
<RootNamespace>$(AssemblyName)</RootNamespace> <RootNamespace>$(AssemblyName)</RootNamespace>
</PropertyGroup> </PropertyGroup>

@ -5,9 +5,9 @@
<ImplicitUsings>disable</ImplicitUsings> <ImplicitUsings>disable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Company>Winsomnia</Company> <Company>Winsomnia</Company>
<Version>1.0.1</Version> <Version>1.0.0</Version>
<AssemblyVersion>1.0.3.1</AssemblyVersion> <AssemblyVersion>1.0.3.0</AssemblyVersion>
<FileVersion>1.0.3.1</FileVersion> <FileVersion>1.0.3.0</FileVersion>
<AssemblyName>Mirea.Api.DataAccess.Domain</AssemblyName> <AssemblyName>Mirea.Api.DataAccess.Domain</AssemblyName>
<RootNamespace>$(AssemblyName)</RootNamespace> <RootNamespace>$(AssemblyName)</RootNamespace>
</PropertyGroup> </PropertyGroup>

@ -386,4 +386,4 @@ namespace MysqlMigrations.Migrations
name: "Campus"); name: "Campus");
} }
} }
} }

@ -80,4 +80,4 @@ namespace MysqlMigrations.Migrations
onDelete: ReferentialAction.SetNull); onDelete: ReferentialAction.SetNull);
} }
} }
} }

@ -362,4 +362,4 @@ namespace PsqlMigrations.Migrations
name: "Campus"); name: "Campus");
} }
} }
} }

@ -46,4 +46,4 @@ namespace PsqlMigrations.Migrations
onDelete: ReferentialAction.SetNull); onDelete: ReferentialAction.SetNull);
} }
} }
} }

@ -361,4 +361,4 @@ namespace SqliteMigrations.Migrations
name: "Campus"); name: "Campus");
} }
} }
} }

@ -46,4 +46,4 @@ namespace SqliteMigrations.Migrations
onDelete: ReferentialAction.SetNull); onDelete: ReferentialAction.SetNull);
} }
} }
} }

@ -19,4 +19,4 @@ public static class ModelBuilderExtensions
var applyConcreteMethod = applyGenericMethod.MakeGenericMethod(entityType); var applyConcreteMethod = applyGenericMethod.MakeGenericMethod(entityType);
applyConcreteMethod.Invoke(modelBuilder, [configuration]); applyConcreteMethod.Invoke(modelBuilder, [configuration]);
} }
} }

@ -5,9 +5,9 @@
<ImplicitUsings>disable</ImplicitUsings> <ImplicitUsings>disable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Company>Winsomnia</Company> <Company>Winsomnia</Company>
<Version>1.0.3</Version> <Version>1.0.0</Version>
<AssemblyVersion>1.0.3.3</AssemblyVersion> <AssemblyVersion>1.0.3.0</AssemblyVersion>
<FileVersion>1.0.3.3</FileVersion> <FileVersion>1.0.3.0</FileVersion>
<AssemblyName>Mirea.Api.DataAccess.Persistence</AssemblyName> <AssemblyName>Mirea.Api.DataAccess.Persistence</AssemblyName>
<RootNamespace>$(AssemblyName)</RootNamespace> <RootNamespace>$(AssemblyName)</RootNamespace>
</PropertyGroup> </PropertyGroup>

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="winsomnia.net" value="https://git.winsomnia.net/api/packages/Winsomnia/nuget/index.json" />
</packageSources>
<packageSourceCredentials>
<winsomnia.net>
<add key="Username" value="%NUGET_USERNAME%" />
<add key="ClearTextPassword" value="%NUGET_PASSWORD%" />
</winsomnia.net>
</packageSourceCredentials>
</configuration>