14 Commits
1.1.2 ... 1.1.7

14 changed files with 290 additions and 147 deletions

BIN
.gitea/readme/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@@ -0,0 +1,32 @@
name: Build
on:
push:
branches:
- "dev"
paths:
- "TimetableDesigner.Backend.Events**"
pull_request:
branches:
- "dev"
- "main"
paths:
- "TimetableDesigner.Backend.Events**"
jobs:
build:
name: Build
runs-on: linux
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.0.x
- name: Restore dependencies
run: dotnet restore
- name: Build
run: dotnet build --no-restore
- name: Create NuGet package
run: dotnet pack -c Debug --output ./

View File

@@ -0,0 +1,96 @@
name: Build and publish package
on:
workflow_dispatch:
branches:
- "main"
push:
branches:
- "main"
paths:
- "TimetableDesigner.Backend.Events**"
jobs:
build:
name: Build
runs-on: linux
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.0.x
- name: Restore dependencies
run: dotnet restore
- name: Build
run: dotnet build --no-restore
version:
name: Determine version
runs-on: linux
needs: build
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: 10.0.x
- name: Setup GitVersion
uses: gittools/actions/gitversion/setup@v4.2.0
with:
versionSpec: 6.4.x
- name: Determine version
uses: gittools/actions/gitversion/execute@v4.2.0
id: gitversion
with:
configFilePath: ./.gitea/config/gitversion.yml
outputs:
version: ${{ steps.gitversion.outputs.SemVer }}
pack:
name: Pack
runs-on: linux
needs: version
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: 10.0.x
- name: Create NuGet package
run: dotnet pack -c Release -p:Version=${{needs.version.outputs.version}} -p:PackageVersion=${{needs.version.outputs.version}} --output ./
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: nuget
path: ./TimetableDesigner.Backend.Events.${{needs.version.outputs.version}}.nupkg
outputs:
version: ${{needs.version.outputs.version}}
publish:
name: Publish
runs-on: linux
needs: pack
steps:
- name: Download artifact
uses: actions/download-artifact@v3
with:
name: nuget
path: ./
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: 10.0.x
- name: Add package source
run: dotnet nuget add source --name gitea --username TimetableDesigner --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text https://repos.mateuszskoczek.com/api/packages/TimetableDesigner/nuget/index.json
- name: Publish
run: dotnet nuget push ./TimetableDesigner.Backend.Events.${{needs.pack.outputs.version}}.nupkg --source gitea --api-key ${{ secrets.PACKAGES_WRITE_TOKEN }} --skip-duplicate
- name: Create Release
uses: akkuman/gitea-release-action@v1
with:
tag_name: ${{needs.pack.outputs.version}}
name: ${{needs.pack.outputs.version}}
files: |-
TimetableDesigner.Backend.Events.${{needs.pack.outputs.version}}.nupkg

View File

@@ -1,22 +0,0 @@
name: Build NuGet package on dev branch pull request
on:
pull_request:
branches:
- "dev"
paths:
- "TimetableDesigner.Backend.Events**"
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6.0.2
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: 10.0.x
- name: Build
run: dotnet build

View File

@@ -1,22 +0,0 @@
name: Build NuGet package on main branch pull request
on:
pull_request:
branches:
- "main"
paths:
- "TimetableDesigner.Backend.Events**"
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6.0.2
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: 10.0.x
- name: Build
run: dotnet build

View File

@@ -1,22 +0,0 @@
name: Build NuGet package on dev branch push
on:
push:
branches:
- "dev"
paths:
- "TimetableDesigner.Backend.Events**"
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6.0.2
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: 10.0.x
- name: Build
run: dotnet build

View File

@@ -1,72 +0,0 @@
name: Build NuGet package on main branch push
on:
push:
branches:
- "main"
paths:
- "TimetableDesigner.Backend.Events**"
jobs:
build:
name: Build and pack
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6.0.2
with:
fetch-depth: 0
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: 10.0.x
- name: Build
run: dotnet build
- name: Setup GitVersion
uses: gittools/actions/gitversion/setup@v4.2.0
with:
versionSpec: 6.4.x
- name: Determine version
uses: gittools/actions/gitversion/execute@v4.2.0
id: gitversion
with:
configFilePath: ./.github/config/gitversion.yml
- name: Create NuGet package
run: dotnet pack -c Release -p:Version=${{steps.gitversion.outputs.SemVer}} -p:PackageVersion=${{steps.gitversion.outputs.SemVer}} --output ${{ github.workspace}}/nuget
- name: Upload artifact
uses: actions/upload-artifact@v6
with:
name: nuget
path: ${{ github.workspace}}/nuget/*.nupkg
outputs:
version: ${{ steps.gitversion.outputs.SemVer }}
publish:
name: Publish
permissions: write-all
runs-on: ubuntu-latest
needs: build
steps:
- name: Download artifact
uses: actions/download-artifact@v6
with:
name: nuget
path: ${{ github.workspace}}/nuget
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: 10.0.x
- name: Add source
run: dotnet nuget add source --username TimetableDesigner --password ${{secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/TimetableDesigner/index.json"
- name: Publish
run: dotnet nuget push ${{ github.workspace}}/nuget/*.nupkg --source "github" --api-key ${{ secrets.NUGET_REGISTRY_API_KEY }} --skip-duplicate
- name: Create Release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{needs.build.outputs.version}}
release_name: ${{needs.build.outputs.version}}
draft: false
prerelease: false

91
README.md Normal file
View File

@@ -0,0 +1,91 @@
<p align="center"><img width="100px" src=".gitea/readme/icon.png"/></p>
<h1 align="center">TimetableDesigner.Backend.Events</h1>
<h3 align="center"><b>Advanced school timetable editor, allows you to easily create and manage school timetable.</b></h3>
<p align="center">TimetableDesigner.Backend.Events is collection of NuGet packages (and NuGet package itself) that support communication between microservices in the TimetableDesigner project using message queues. This NuGet package contains base classes and interfaces used in other packages and in microservices itself.</p>
---
## Informations
> [!Important]
> **For Github users:**
>
> This is only mirror repository. All changes are first uploaded to the repository <a href="https://repos.mateuszskoczek.com/TimetableDesigner/TimetableDesigner.Backend.Events">here</a>. Releases are also published on original repository. However, Github repository handles issues and pull requests for better accessibility.
## NuGet registry status
<table>
<tr>
<th>
Subpackage
</th>
<th>
Status
</th>
</tr>
<tr>
<td>
<b>TimetableDesigner.Backend.Events</b>
</td>
<td>
<a href="https://repos.mateuszskoczek.com/TimetableDesigner/-/packages/nuget/timetabledesigner.backend.events/"><img src="https://img.shields.io/gitea/v/release/TimetableDesigner/TimetableDesigner.Backend.Events?gitea_url=https%3A%2F%2Frepos.mateuszskoczek.com%2F&display_name=release&label=nuget"></a>
</td>
</tr>
<tr>
<th colspan=2>
Other subpackages
</th>
</tr>
<tr>
<td>
TimetableDesigner.Backend.Events.OutboxPattern
</td>
<td>
<a href="https://repos.mateuszskoczek.com/TimetableDesigner/-/packages/nuget/timetabledesigner.backend.events.outboxpattern/"><img src="https://img.shields.io/gitea/v/release/TimetableDesigner/TimetableDesigner.Backend.Events.OutboxPattern?gitea_url=https%3A%2F%2Frepos.mateuszskoczek.com%2F&display_name=release&label=nuget"></a>
</td>
</tr>
<tr>
<td>
TimetableDesigner.Backend.Events.Extensions.AspNetCore.OpenApi
</td>
<td>
<a href="https://repos.mateuszskoczek.com/TimetableDesigner/-/packages/nuget/timetabledesigner.backend.events.extensions.aspnetcore.openapi/"><img src="https://img.shields.io/gitea/v/release/TimetableDesigner/TimetableDesigner.Backend.Events.Extensions.AspNetCore.OpenApi?gitea_url=https%3A%2F%2Frepos.mateuszskoczek.com%2F&display_name=release&label=nuget"></a>
</td>
</tr>
<tr>
<td>
TimetableDesigner.Backend.Events.Providers.RabbitMQ
</td>
<td>
<a href="https://repos.mateuszskoczek.com/TimetableDesigner/-/packages/nuget/timetabledesigner.backend.events.providers.rabbitmq/"><img src="https://img.shields.io/gitea/v/release/TimetableDesigner/TimetableDesigner.Backend.Events.Providers.RabbitMQ?gitea_url=https%3A%2F%2Frepos.mateuszskoczek.com%2F&display_name=release&label=nuget"></a>
</td>
</tr>
</table>
## Installation and usage
You can download package from organization package registry or .nupkg file itself from Releases tab.
To download package from organization package registry, you have to add new NuGet package source. You will need access details, which you can obtain by contacting the repository owner.
**CLI:**
```
dotnet nuget add source --name TimetableDesigner --username <username> --password <password> https://repos.mateuszskoczek.com/api/packages/TimetableDesigner/nuget/index.json
dotnet add package --source TimetableDesigner TimetableDesigner.Backend.Events
```
**Package reference in .csproj file:**
```
<PackageReference Include="TimetableDesigner.Backend.Events" Version="<version>" />
```
## Attribution and contribution
This project is open source on MIT License, so you can just copy and upload again to your repository. But according to the license, you must include information about the original author. You can find license <a href="https://repos.mateuszskoczek.com/TimetableDesigner/TimetableDesigner.Backend.Events/src/branch/main/LICENSE">here</a>.
However, the preferred way to contribute would be to propose improvements in a pull request, through issues, or through other means of communication.

View File

@@ -4,8 +4,14 @@ namespace TimetableDesigner.Backend.Events;
public abstract class EventQueue<TSelf> where TSelf : EventQueue<TSelf> public abstract class EventQueue<TSelf> where TSelf : EventQueue<TSelf>
{ {
public abstract void Setup<TBuilder>(IServiceCollection services, TBuilder configuration) public void Setup<TBuilder>(IServiceCollection services, TBuilder configuration)
where TBuilder : EventQueueBuilder<TSelf>; where TBuilder : EventQueueBuilder<TSelf> =>
Setup(services, configuration.GetConnectionParameters());
public abstract void Setup(IServiceCollection services, string connectionString); public void Setup(IServiceCollection services, string connectionString)
=> Setup(services, connectionString.Split(';')
.Select(x => x.Split('='))
.ToDictionary(x => x.First(), x => x.Last()));
protected abstract void Setup(IServiceCollection services, IDictionary<string, string> connectionParameters);
} }

View File

@@ -1,3 +1,6 @@
namespace TimetableDesigner.Backend.Events; namespace TimetableDesigner.Backend.Events;
public abstract class EventQueueBuilder<TQueue> where TQueue : EventQueue<TQueue>; public abstract class EventQueueBuilder<TQueue> where TQueue : EventQueue<TQueue>
{
public abstract IDictionary<string, string> GetConnectionParameters();
}

View File

@@ -1,6 +1,10 @@
namespace TimetableDesigner.Backend.Events; using System.Text.Json;
using System.Text.Json.Nodes;
namespace TimetableDesigner.Backend.Events;
public interface IEventQueuePublisher public interface IEventQueuePublisher
{ {
public Task PublishAsync<T>(T data) where T : class; public sealed Task PublishAsync<T>(T data) where T : class => PublishAsync(JsonSerializer.Serialize(data), data.GetType());
public Task PublishAsync(string data, Type dataType);
} }

View File

@@ -0,0 +1,41 @@
# TimetableDesigner.Backend.Events
### Advanced school timetable editor, allows you to easily create and manage school timetable.
TimetableDesigner.Backend.Events is collection of NuGet packages (and NuGet package itself) that support communication between microservices in the TimetableDesigner project using message queues. This NuGet package contains base classes and interfaces used in other packages and in microservices itself.
---
## NuGet registry status
| Subpackage | Status |
|----------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **TimetableDesigner.Backend.Events** | [![NuGet version (TimetableDesigner.Backend.Events)](https://img.shields.io/gitea/v/release/TimetableDesigner/TimetableDesigner.Backend.Events?gitea_url=https%3A%2F%2Frepos.mateuszskoczek.com%2F&display_name=release&label=nuget)](https://repos.mateuszskoczek.com/TimetableDesigner/-/packages/nuget/timetabledesigner.backend.events/) |
| TimetableDesigner.Backend.Events.OutboxPattern | [![NuGet version (TimetableDesigner.Backend.Events.OutboxPattern)](https://img.shields.io/gitea/v/release/TimetableDesigner/TimetableDesigner.Backend.Events.OutboxPattern?gitea_url=https%3A%2F%2Frepos.mateuszskoczek.com%2F&display_name=release&label=nuget)](https://repos.mateuszskoczek.com/TimetableDesigner/-/packages/nuget/timetabledesigner.backend.events.outboxpattern/) |
| TimetableDesigner.Backend.Events.Extensions.AspNetCore.OpenApi | [![NuGet version (TimetableDesigner.Backend.Events.Extensions.AspNetCore.OpenApi)](https://img.shields.io/gitea/v/release/TimetableDesigner/TimetableDesigner.Backend.Events.Extensions.AspNetCore.OpenApi?gitea_url=https%3A%2F%2Frepos.mateuszskoczek.com%2F&display_name=release&label=nuget)](https://repos.mateuszskoczek.com/TimetableDesigner/-/packages/nuget/timetabledesigner.backend.events.extensions.aspnetcore.openapi/) |
| TimetableDesigner.Backend.Events.Providers.RabbitMQ | [![NuGet version (TimetableDesigner.Backend.Events.Providers.RabbitMQ)](https://img.shields.io/gitea/v/release/TimetableDesigner/TimetableDesigner.Backend.Events.Providers.RabbitMQ?gitea_url=https%3A%2F%2Frepos.mateuszskoczek.com%2F&display_name=release&label=nuget)](https://repos.mateuszskoczek.com/TimetableDesigner/-/packages/nuget/timetabledesigner.backend.events.providers.rabbitmq/) |
## Installation and usage
You can download package from organization package registry or .nupkg file itself from Releases tab.
To download package from organization package registry, you have to add new NuGet package source. You will need access details, which you can obtain by contacting the repository owner.
**CLI:**
```
dotnet nuget add source --name TimetableDesigner --username <username> --password <password> https://repos.mateuszskoczek.com/api/packages/TimetableDesigner/nuget/index.json
dotnet add package --source TimetableDesigner TimetableDesigner.Backend.Events
```
**Package reference in .csproj file:**
```
<PackageReference Include="TimetableDesigner.Backend.Events" Version="<version>" />
```
## Attribution and contribution
This project is open source on MIT License, so you can just copy and upload again to your repository. But according to the license, you must include information about the original author. You can find license <a href="https://repos.mateuszskoczek.com/TimetableDesigner/TimetableDesigner.Backend.Events/src/branch/main/LICENSE">here</a>.
However, the preferred way to contribute would be to propose improvements in a pull request, through issues, or through other means of communication.

View File

@@ -6,9 +6,13 @@
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Title>TimetableDesigner.Backend.Events</Title> <Title>TimetableDesigner.Backend.Events</Title>
<Authors>Mateusz Skoczek</Authors> <Authors>Mateusz Skoczek</Authors>
<PackageProjectUrl>https://github.com/TimetableDesigner</PackageProjectUrl> <PackageProjectUrl>https://repos.mateuszskoczek.com/TimetableDesigner</PackageProjectUrl>
<PackageIcon>icon.png</PackageIcon> <PackageIcon>icon.png</PackageIcon>
<RepositoryUrl>https://github.com/TimetableDesigner/TimetableDesigner.Backend.Events</RepositoryUrl> <RepositoryUrl>https://repos.mateuszskoczek.com/TimetableDesigner/TimetableDesigner.Backend.Events</RepositoryUrl>
<Copyright>Mateusz Skoczek</Copyright>
<PackageLicenseUrl>https://repos.mateuszskoczek.com/TimetableDesigner/TimetableDesigner.Backend.Events/src/branch/main/LICENSE</PackageLicenseUrl>
<Description>Advanced school timetable editor, allows you to easily create and manage school timetable - package that support communication between microservices in the project using message queues (base classes and interfaces)</Description>
<PackageReadmeFile>README.md</PackageReadmeFile>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@@ -21,6 +25,10 @@
<Pack>True</Pack> <Pack>True</Pack>
<PackagePath></PackagePath> <PackagePath></PackagePath>
</None> </None>
<None Update="README.md">
<Pack>True</Pack>
<PackagePath></PackagePath>
</None>
</ItemGroup> </ItemGroup>
</Project> </Project>