7 Commits

11 changed files with 171 additions and 1 deletions

View File

@@ -0,0 +1,31 @@
name: release-nuget-package
on:
push:
tags:
- '*'
jobs:
build:
name: Release NuGet Package
runs-on: ubuntu-latest
steps:
- name: "Git clone"
run: git clone ${{ gitea.server_url }}/${{ gitea.repository }}.git .
- name: "Git checkout"
run: git checkout "${{ gitea.sha }}"
- name: "Dotnet SDK einrichten"
uses: actions/setup-dotnet@v4
with:
dotnet-version: "10.0.x"
- name: "Get configured dotnet sources"
run: dotnet nuget list sources
- name: "Build Interfaces Project"
run: dotnet build -c PublishNuget ./Interfaces/Interfaces.csproj
- name: "Release to Package Registry"
run: dotnet nuget push --source gitea --api-key ${{ secrets.REGISTRY_TOKEN_KOCODER }} ./Interfaces/Interfaces.*.nupkg
- name: "Create release"
uses: akkuman/gitea-release-action@v1
with:
files: |-
./alumnihub.deb
./alumnihub/opt/alumnihub/Packages/*.nupkg

20
Interfaces/IReportUI.cs Normal file
View File

@@ -0,0 +1,20 @@
namespace Interfaces;
/// <summary>
/// Interface for the UI component that allows users to report entities.
/// This interface defines the properties that a reporting UI should have.
/// </summary>
public interface IReportUI
{
/// <summary>
/// The type of the UI Component that should be used to display the reporting interface.
/// This should be passed to DynamicComponent to render the UI Component.
/// Component that implement this interface should return typeof(this) in this property.
/// </summary>
Type ReportType { get; }
/// <summary>
/// The reportable Entity that is being reported.
/// </summary>
IReportable ReportableEntity { get; set; }
}

View File

@@ -1,8 +1,27 @@
namespace Interfaces; namespace Interfaces;
/// <summary>
/// Interface for entities that can be reported by users. This includes things like posts, comments, and user profiles.
/// The IReportUI interface will use this interface to determine what information to display when a user reports an
/// entity, and the IReportingHandler interface will use this interface to determine how to handle the report when it is
/// submitted.
/// </summary>
public interface IReportable public interface IReportable
{ {
/// <summary>
/// Module Name is no longer required. Use ModuleID and EntityID instead to uniquely identify the type of entity being reported.
/// </summary>
[Obsolete]
public string ModuleName { get; } public string ModuleName { get; }
/// <summary>
/// The ID of the Module from an Entity that is beeing reported.
/// This is used to determine the type of entity being reported.
/// </summary>
public int ModuleID { get; } public int ModuleID { get; }
/// <summary>
/// The ID of an Entity that is beeing reported. This is used to determine the exact entity being reported.
/// </summary>
public int EntityID { get; } public int EntityID { get; }
} }

View File

@@ -1,6 +1,19 @@
namespace Interfaces; namespace Interfaces;
/// <summary>
/// Handler for processing user reports. This interface defines a method for handling reports submitted by users,
/// which includes the reportable entity and any additional notes provided by the user. Implementations of this
/// interface will determine how to process the report, such as logging it, notifying moderators,
/// or taking action against the reported entity.
/// </summary>
public interface IReportingHandler public interface IReportingHandler
{ {
public void Report(IReportable reportable); /// <summary>
/// Report an IReportable entity with a note. Implementations of this method should handle the report appropriately,
/// such as logging it, saving it, notifying moderators and taking action against the owner of the reported entity
/// if necessary.
/// </summary>
/// <param name="reportable">The Entity - as in the Message, Note, Posting, ... - that should be reported</param>
/// <param name="note">A note from the reporting user which is only visible to the admins.</param>
public void Report(IReportable reportable, string note);
} }

View File

@@ -6,4 +6,11 @@
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
</PropertyGroup> </PropertyGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Condition="'$(OS)' == 'Windows_NT' And '$(Configuration)' == 'Debug'" Command="debug.cmd $(TargetFramework) $([System.String]::Copy('$(MSBuildProjectName)').Replace('.Package',''))" />
<Exec Condition="'$(OS)' != 'Windows_NT' And '$(Configuration)' == 'Debug'" Command="bash $(ProjectDir)debug.sh $(TargetFramework) $([System.String]::Copy('$(MSBuildProjectName)').Replace('.Package',''))" />
<Exec Condition="'$(OS)' == 'Windows_NT' And '$(Configuration)' == 'Release'" Command="release.cmd $(TargetFramework) $([System.String]::Copy('$(MSBuildProjectName)').Replace('.Package',''))" />
<Exec Condition="'$(OS)' != 'Windows_NT' And '$(Configuration)' == 'Release'" Command="bash $(ProjectDir)release.sh $(TargetFramework) $([System.String]::Copy('$(MSBuildProjectName)').Replace('.Package',''))" />
<Exec Condition="'$(OS)' != 'Windows_NT' And '$(Configuration)' == 'PublishNuget'" Command="bash $(ProjectDir)release.sh $(TargetFramework) $([System.String]::Copy('$(MSBuildProjectName)').Replace('.Package','')) skip-copy-to-oqtane.framework" />
</Target>
</Project> </Project>

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>$projectname$</id>
<version>1.0.0</version>
<authors>SZUAbsolventenverein</authors>
<owners>SZUAbsolventenverein</owners>
<title>Interfaces</title>
<description>Interfaces</description>
<copyright>SZUAbsolventenverein</copyright>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<license type="expression">MIT</license>
<releaseNotes></releaseNotes>
<summary></summary>
<packageTypes>
<packageType name="Dependency" />
</packageTypes>
</metadata>
<files>
<file src="./bin\Release\$targetframework$\$ProjectName$.dll" target="lib\$targetframework$" />
<file src="./bin\Release\$targetframework$\$ProjectName$.pdb" target="lib\$targetframework$" />
</files>
</package>

6
Interfaces/debug.cmd Normal file
View File

@@ -0,0 +1,6 @@
@echo off
set TargetFramework=%1
set ProjectName=%2
XCOPY "\bin\Debug\%TargetFramework%\%ProjectName%.dll" "..\..\oqtane.framework\Oqtane.Server\bin\Debug\%TargetFramework%\" /Y
XCOPY "\bin\Debug\%TargetFramework%\%ProjectName%.pdb" "..\..\oqtane.framework\Oqtane.Server\bin\Debug\%TargetFramework%\" /Y

7
Interfaces/debug.sh Normal file
View File

@@ -0,0 +1,7 @@
#!/bin/bash
TargetFramework=$1
ProjectName=$2
cp -f "./bin/Debug/$TargetFramework/$ProjectName.dll" "../../oqtane.framework/Oqtane.Server/bin/Debug/$TargetFramework/"
cp -f "./bin/Debug/$TargetFramework/$ProjectName.pdb" "../../oqtane.framework/Oqtane.Server/bin/Debug/$TargetFramework/"

7
Interfaces/release.cmd Normal file
View File

@@ -0,0 +1,7 @@
@echo off
set TargetFramework=%1
set ProjectName=%2
del "*.nupkg"
"..\..\oqtane.framework\oqtane.package\nuget.exe" pack %ProjectName%.nuspec -Properties targetframework=%TargetFramework%;projectname=%ProjectName%
XCOPY "*.nupkg" "..\..\oqtane.framework\Oqtane.Server\Packages\" /Y

12
Interfaces/release.sh Normal file
View File

@@ -0,0 +1,12 @@
#!/bin/bash
TargetFramework=$1
ProjectName=$2
find . -name *.nupkg -delete
dotnet pack $ProjectName.nuspec "/p:targetframework=${TargetFramework};ProjectName=${ProjectName}"
if [ "$#" -ne 3 ]; then
echo "Skipping copy to Oqtane.Server/Packages"
else
cp -f *.nupkg ../../oqtane.framework/Oqtane.Server/Packages/
fi

25
README.md Normal file
View File

@@ -0,0 +1,25 @@
# Interfaces
Dieses Repository enthält die Schnittstellen für die verschiedenen Module unseres Systems. Die Architektur ist auf Modularität und Skalierbarkeit ausgelegt, wobei jedes Modul über definierte Schnittstellen kommuniziert.
Ausschlaggebender Grund für die Einführung der Schnittstellenschicht war die Entwicklung des Report Systems. Anbei eine Übersicht der Architektur:
```mermaid
architecture-beta
service hof(server)[Hall of Fame]
service er(server)[Event Registration]
service pa(server)[Premium Area]
service bb(server)[Black Board]
service i(database)[Interfaces]
service rs(server)[Report System]
rs:L --> R:i
junction i1
junction i2
i:T <-- B:i2
i1:L -- R:hof
i1:R -- L:er
i1:B -- T:i2
i2:L -- R:pa
i2:R -- L:bb
```