crowdNFO
Konzept in Stichpunkten:
- Es gibt user mit verschiedenen trust-grades
- Neue User können sich bewerben(Bewerbungsformular) und müssen freigeschaltet werden
- Adminpanel (Userverwaltung, Release-Verwaltung, Bewerbungsverwaltung, Bewerbungsformular-Verwaltung, NFO/MediaInfo Reportverwaltung)
- User haben Rollen(Admins, Member, Trusted, VIP). Nur Admins können auf den Adminbereich zugreifen
- Jede Rolle hat einen Unterschiedlichen SubmissionTrustGrade (default: 1)
- User Felder u.A: username, passwordhash, email, role,
- User haben einen Memberbereich (Passwort ändern, Ticket erstellen)
- Es gibt Releases
- Releases können sowohl eine NFO als auch MediaInfos haben
- User können eine NFO und/oder MediaInfo submitten
- Wurde eine NFO/MediaInfo von genügend verschiedenen Usern submitted wird sie akzeptiert (sobald der kumulative SubmissionTrustGrade der User >= 5 ist)
- NFOs/MediaInfos können reported werden inkl. Kommentar
- Releases können von Usern kommentiert werden
- ASP.NET API
- PostgreSQL
- Userprofil mit Anzahl submitteter NFOs/MediaInfos
- Highscore
----------------------------------------------------------------------------------------
## Projektkonzept: crowdNFO Datenbank + App
### Projektübersicht
Die crowdNFO Datenbank + App ist eine Plattform, die .NFO-Dateien und MediaInfos zu Releases von Warez-Release-Groups durch Crowdsourcing sammelt. Benutzer können NFO-Dateien und MediaInfos zu Releases einreichen und diese kommentieren. Das System basiert auf Benutzerrollen und Vertrauensstufen, um die Qualität der eingereichten Dateien zu gewährleisten.
Folgend: Dateien bezeichnet sowohl NFO-Dateien als auch MediaInfo JSON Dateien
Ein Release hat kann beliebig viele Dateien haben. Die Datei mit dem höchsten kumulativen SubmissionTrustGrade wird als Standard angesehen.
### Hauptfunktionen
1. **Benutzerverwaltung**
- Benutzer können sich über ein Bewerbungsformular registrieren.
- Neue Benutzer müssen von Administratoren freigeschaltet werden.
- Benutzerrollen: Admin, Member, Trusted, VIP.
- Unterschiedliche Rollen haben verschiedene SubmissionTrustGrades (Standard: 1).
- Benutzerprofile enthalten: Benutzername, Passwort-Hash, E-Mail, Rolle.
2. **Admin-Panel**
- Verwaltung der Benutzer (Zuweisung von Rollen, Freischaltung neuer Benutzer).
- Verwaltung der Dateien (Annahme, Ablehnung, Bearbeitung).
- Verwaltung der Bewerbungen (Überprüfung und Entscheidung).
- Verwaltung des Bewerbungsformulars (Anpassung und Aktualisierung).
- Verwaltung der Reports (Überprüfung und Entscheidung).
3. **Mitgliederbereich**
- Benutzer können ihr Passwort ändern.
- Benutzer können ihr Profil auf die Sichtbarkeit privat/nur Mitglieder/öffentlich ändern
- Benutzer können Tickets erstellen und Support anfordern.
- Benutzer können Dateien(NFO/MediaInfo) einreichen.
- Benutzer können Dateien melden
- Benutzer können Releases kommentieren
- Benutzer haben ein Profil, auf dem die Anzahl der eingereichten Dateien sichtbar ist.
- Es gibt eine Highscore-API, welche die 100 Nutzer mit den meisten Einreichungen anzeigt (je nach Sichtbarkeitseinstellung wird der Name zensiert)
4. **NFO/MediaInfo-Management**
- Einreichung von Dateien durch Benutzer.
- Akzeptanz von Dateien erfolgt, wenn der kumulative SubmissionTrustGrade der einreichenden Benutzer ≥ 5 ist.
- Dateien können von Benutzern gemeldet werden
- Kommentare können von Benutzern gemeldet werden
### Technische Spezifikationen
1. **Backend**
- **ASP.NET API**: Bereitstellung von Endpunkten für alle CRUD-Operationen und Authentifizierungsmechanismen.
- **PostgreSQL**: Datenbank zur Speicherung aller Benutzerdaten, NFO-Dateien und Berichte.
2. **Frontend**
- **Web-Anwendung**: Benutzerfreundliche Oberfläche für Admin- und Mitgliederbereich.
- **Responsive Design**: Unterstützung für Desktop und mobile Geräte.
### Datenbankstruktur
```
-- Enum Definitionen
CREATE TYPE profile_visibility_enum AS ENUM ('public', 'members_only', 'private');
CREATE TYPE application_status_enum AS ENUM ('pending', 'approved', 'rejected');
CREATE TYPE file_type_enum AS ENUM ('NFO', 'MediaInfo');
CREATE TYPE file_status_enum AS ENUM ('pending', 'accepted', 'rejected');
CREATE TYPE report_status_enum AS ENUM ('pending', 'reviewed', 'resolved');
CREATE TYPE ticket_status_enum AS ENUM ('open', 'closed');
-- Tabelle Rollen
CREATE TABLE Roles (
RoleId SERIAL PRIMARY KEY,
RoleName VARCHAR(50) UNIQUE NOT NULL,
SubmissionTrustGrade INTEGER DEFAULT 1,
CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UpdatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabelle Benutzer
CREATE TABLE Users (
UserId SERIAL PRIMARY KEY,
Username VARCHAR(50) UNIQUE NOT NULL,
PasswordHash VARCHAR(255) NOT NULL,
Email VARCHAR(100) UNIQUE NOT NULL,
RoleId INTEGER REFERENCES Roles(RoleId) ON DELETE SET NULL,
ProfileVisibility profile_visibility_enum DEFAULT 'public',
IsActivated BOOLEAN DEFAULT FALSE,
CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UpdatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabelle Bewerbungen
CREATE TABLE Applications (
ApplicationId SERIAL PRIMARY KEY,
UserId INTEGER REFERENCES Users(UserId) ON DELETE CASCADE,
ApplicationData TEXT NOT NULL,
Status application_status_enum DEFAULT 'pending',
CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UpdatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabelle Releases
CREATE TABLE Releases (
ReleaseId SERIAL PRIMARY KEY,
Title VARCHAR(255) NOT NULL,
Description TEXT,
CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UpdatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabelle Dateien
CREATE TABLE Files (
FileId SERIAL PRIMARY KEY,
ReleaseId INTEGER REFERENCES Releases(ReleaseId) ON DELETE CASCADE,
UserId INTEGER REFERENCES Users(UserId) ON DELETE SET NULL,
FileType file_type_enum NOT NULL,
FileName VARCHAR(255) NOT NULL,
SubmissionTrustGrade INTEGER DEFAULT 0,
Status file_status_enum DEFAULT 'pending',
CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UpdatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabelle Kommentare
CREATE TABLE Comments (
CommentId SERIAL PRIMARY KEY,
ReleaseId INTEGER REFERENCES Releases(ReleaseId) ON DELETE CASCADE,
UserId INTEGER REFERENCES Users(UserId) ON DELETE SET NULL,
CommentText TEXT NOT NULL,
CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UpdatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabelle Meldungen
CREATE TABLE Reports (
ReportId SERIAL PRIMARY KEY,
FileId INTEGER REFERENCES Files(FileId) ON DELETE CASCADE,
UserId INTEGER REFERENCES Users(UserId) ON DELETE SET NULL,
ReportReason TEXT NOT NULL,
Status report_status_enum DEFAULT 'pending',
CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UpdatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabelle Tickets
CREATE TABLE Tickets (
TicketId SERIAL PRIMARY KEY,
UserId INTEGER REFERENCES Users(UserId) ON DELETE SET NULL,
Subject VARCHAR(255) NOT NULL,
Message TEXT NOT NULL,
Status ticket_status_enum DEFAULT 'open',
CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UpdatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabelle Highscore
CREATE TABLE Highscore (
HighscoreId SERIAL PRIMARY KEY,
UserId INTEGER REFERENCES Users(UserId) ON DELETE CASCADE,
SubmissionCount INTEGER DEFAULT 0,
CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UpdatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Insert predefined roles
INSERT INTO Roles (RoleName, SubmissionTrustGrade) VALUES
('Admin', 5),
('Member', 1),
('Trusted', 3),
('VIP', 4);
```
### Rollen und Berechtigungen
1. **Admins**
- Voller Zugriff auf das Admin-Panel.
- Verwaltung von Benutzern, Dateien, Bewerbungen und Berichten.
2. **Member**
- Kann Dateien einreichen, kommentieren und melden.
- Zugriff auf den Mitgliederbereich.
3. **Trusted**
- Höherer SubmissionTrustGrade.
- Kann Dateien einreichen, kommentieren und melden.
4. **VIP**
- Noch höherer SubmissionTrustGrade.
- Kann Dateien einreichen, kommentieren und melden.
### Workflow
1. **Registrierung und Bewerbung**
- Neue Benutzer registrieren sich über ein Bewerbungsformular.
- Bewerbungen werden von Admins geprüft und freigeschaltet.
2. **NFO und/oder MediaInfo-Einreichung und Überprüfung**
- Benutzer reichen Dateien ein.
- Dateien werden akzeptiert, wenn der kumulative SubmissionTrustGrade der einreichenden Benutzer ≥ 5 ist.
3. **Release-Kommentierung und Berichtserstellung**
- Benutzer können Releases kommentieren
- Benutzer können Dateien(NFO/MediaInfo) von Releases melden (mit Kommentar)
- Reports werden von Admins geprüft und entsprechende Maßnahmen ergriffen.