Compare commits
No commits in common. "a343fa2d7f8c27432d42c48f48370fc7b28a13e9" and "7cae2600ec06ee2da08fdca751cac9e414f908f5" have entirely different histories.
a343fa2d7f
...
7cae2600ec
2
.gitignore
vendored
2
.gitignore
vendored
@ -4,8 +4,6 @@
|
|||||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||||
|
|
||||||
seed.secrects.json
|
seed.secrects.json
|
||||||
efbundle
|
|
||||||
efbundle.exe
|
|
||||||
out/
|
out/
|
||||||
|
|
||||||
#Docker Compose Secrets
|
#Docker Compose Secrets
|
||||||
|
10
Dockerfile
10
Dockerfile
@ -1,6 +1,6 @@
|
|||||||
#FROM golang:latest as goose
|
FROM golang:latest as goose
|
||||||
|
|
||||||
#RUN go install github.com/pressly/goose/v3/cmd/goose@latest
|
RUN go install github.com/pressly/goose/v3/cmd/goose@latest
|
||||||
|
|
||||||
FROM mcr.microsoft.com/dotnet/sdk:7.0.103 as build
|
FROM mcr.microsoft.com/dotnet/sdk:7.0.103 as build
|
||||||
|
|
||||||
@ -26,9 +26,9 @@ ENV DOTNET_URLS=http://*:5000
|
|||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
#RUN mkdir /migrations
|
RUN mkdir /migrations
|
||||||
COPY --from=publish /app/build /app
|
COPY --from=publish /app/build /app
|
||||||
#COPY --from=build ./app/Newsbot.Collector.Database/Migrations /app/migrations
|
COPY --from=build ./app/Newsbot.Collector.Database/Migrations /app/migrations
|
||||||
#COPY --from=goose /go/bin/goose /app
|
COPY --from=goose /go/bin/goose /app
|
||||||
|
|
||||||
CMD [ "dotnet", "Newsbot.Collector.Api.dll" ]
|
CMD [ "dotnet", "Newsbot.Collector.Api.dll" ]
|
@ -1,39 +0,0 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Microsoft.Extensions.Configuration;
|
|
||||||
using Newsbot.Collector.Domain.Consts;
|
|
||||||
using Newsbot.Collector.Domain.Entities;
|
|
||||||
|
|
||||||
namespace Newsbot.Collector.Database;
|
|
||||||
|
|
||||||
public class DatabaseContext : DbContext
|
|
||||||
{
|
|
||||||
public DbSet<ArticlesEntity> Articles { get; set; } = null!;
|
|
||||||
public DbSet<DiscordQueueEntity> DiscordQueue { get; set; } = null!;
|
|
||||||
public DbSet<DiscordWebhookEntity> DiscordWebhooks { get; set; } = null!;
|
|
||||||
public DbSet<IconEntity> Icons { get; set; } = null!;
|
|
||||||
public DbSet<SourceEntity> Sources { get; set; } = null!;
|
|
||||||
public DbSet<SubscriptionEntity> Subscriptions { get; set; } = null!;
|
|
||||||
|
|
||||||
private string ConnectionString { get; set; }
|
|
||||||
|
|
||||||
public DatabaseContext(IConfiguration appsettings)
|
|
||||||
{
|
|
||||||
var connString = appsettings.GetConnectionString(ConfigConnectionStringConst.Database);
|
|
||||||
ConnectionString = connString ?? "";
|
|
||||||
}
|
|
||||||
|
|
||||||
public DatabaseContext(string connectionString)
|
|
||||||
{
|
|
||||||
ConnectionString = connectionString;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnConfiguring(DbContextOptionsBuilder options)
|
|
||||||
{
|
|
||||||
options.UseNpgsql(ConnectionString);
|
|
||||||
}
|
|
||||||
|
|
||||||
public DatabaseContext(DbContextOptions<DatabaseContext> options)
|
|
||||||
: base(options)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,15 +0,0 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Microsoft.EntityFrameworkCore.Design;
|
|
||||||
|
|
||||||
namespace Newsbot.Collector.Database;
|
|
||||||
|
|
||||||
public class DesignTimeContext :IDesignTimeDbContextFactory<DatabaseContext>
|
|
||||||
{
|
|
||||||
public DatabaseContext CreateDbContext(string[] args)
|
|
||||||
{
|
|
||||||
var optionsBuilder = new DbContextOptionsBuilder<DatabaseContext>();
|
|
||||||
// pass your design time connection string here
|
|
||||||
optionsBuilder.UseNpgsql("<connection_string>");
|
|
||||||
return new DatabaseContext(optionsBuilder.Options);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,223 +0,0 @@
|
|||||||
// <auto-generated />
|
|
||||||
using System;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|
||||||
using Newsbot.Collector.Database;
|
|
||||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
namespace Newsbot.Collector.Database.Migrations
|
|
||||||
{
|
|
||||||
[DbContext(typeof(DatabaseContext))]
|
|
||||||
[Migration("20230619043102_MigrationFromGoose")]
|
|
||||||
partial class MigrationFromGoose
|
|
||||||
{
|
|
||||||
/// <inheritdoc />
|
|
||||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
|
||||||
{
|
|
||||||
#pragma warning disable 612, 618
|
|
||||||
modelBuilder
|
|
||||||
.HasAnnotation("ProductVersion", "7.0.7")
|
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 63);
|
|
||||||
|
|
||||||
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
|
||||||
|
|
||||||
modelBuilder.Entity("Newsbot.Collector.Domain.Entities.ArticlesEntity", b =>
|
|
||||||
{
|
|
||||||
b.Property<Guid>("Id")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("uuid");
|
|
||||||
|
|
||||||
b.Property<string>("AuthorImage")
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("AuthorName")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<bool>("CodeIsCommit")
|
|
||||||
.HasColumnType("boolean");
|
|
||||||
|
|
||||||
b.Property<bool>("CodeIsRelease")
|
|
||||||
.HasColumnType("boolean");
|
|
||||||
|
|
||||||
b.Property<string>("Description")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<DateTime>("PubDate")
|
|
||||||
.HasColumnType("timestamp with time zone");
|
|
||||||
|
|
||||||
b.Property<Guid>("SourceId")
|
|
||||||
.HasColumnType("uuid");
|
|
||||||
|
|
||||||
b.Property<string>("Tags")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Thumbnail")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Title")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Url")
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Video")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<int>("VideoHeight")
|
|
||||||
.HasColumnType("integer");
|
|
||||||
|
|
||||||
b.Property<int>("VideoWidth")
|
|
||||||
.HasColumnType("integer");
|
|
||||||
|
|
||||||
b.HasKey("Id");
|
|
||||||
|
|
||||||
b.ToTable("Articles");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Newsbot.Collector.Domain.Entities.DiscordQueueEntity", b =>
|
|
||||||
{
|
|
||||||
b.Property<Guid>("Id")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("uuid");
|
|
||||||
|
|
||||||
b.Property<Guid>("ArticleId")
|
|
||||||
.HasColumnType("uuid");
|
|
||||||
|
|
||||||
b.HasKey("Id");
|
|
||||||
|
|
||||||
b.ToTable("DiscordQueue");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Newsbot.Collector.Domain.Entities.DiscordWebhookEntity", b =>
|
|
||||||
{
|
|
||||||
b.Property<Guid>("Id")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("uuid");
|
|
||||||
|
|
||||||
b.Property<string>("Channel")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<bool>("Enabled")
|
|
||||||
.HasColumnType("boolean");
|
|
||||||
|
|
||||||
b.Property<string>("Server")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Url")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.HasKey("Id");
|
|
||||||
|
|
||||||
b.ToTable("DiscordWebhooks");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Newsbot.Collector.Domain.Entities.IconEntity", b =>
|
|
||||||
{
|
|
||||||
b.Property<Guid>("Id")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("uuid");
|
|
||||||
|
|
||||||
b.Property<string>("FileName")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Site")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<Guid>("SourceId")
|
|
||||||
.HasColumnType("uuid");
|
|
||||||
|
|
||||||
b.HasKey("Id");
|
|
||||||
|
|
||||||
b.ToTable("Icons");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Newsbot.Collector.Domain.Entities.SourceEntity", b =>
|
|
||||||
{
|
|
||||||
b.Property<Guid>("Id")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("uuid");
|
|
||||||
|
|
||||||
b.Property<bool>("Deleted")
|
|
||||||
.HasColumnType("boolean");
|
|
||||||
|
|
||||||
b.Property<bool>("Enabled")
|
|
||||||
.HasColumnType("boolean");
|
|
||||||
|
|
||||||
b.Property<string>("Name")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Site")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Source")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Tags")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Type")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Url")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Value")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("YoutubeId")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.HasKey("Id");
|
|
||||||
|
|
||||||
b.ToTable("Sources");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Newsbot.Collector.Domain.Entities.SubscriptionEntity", b =>
|
|
||||||
{
|
|
||||||
b.Property<Guid>("Id")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("uuid");
|
|
||||||
|
|
||||||
b.Property<bool>("CodeAllowCommits")
|
|
||||||
.HasColumnType("boolean");
|
|
||||||
|
|
||||||
b.Property<bool>("CodeAllowReleases")
|
|
||||||
.HasColumnType("boolean");
|
|
||||||
|
|
||||||
b.Property<Guid>("DiscordWebHookId")
|
|
||||||
.HasColumnType("uuid");
|
|
||||||
|
|
||||||
b.Property<Guid>("SourceId")
|
|
||||||
.HasColumnType("uuid");
|
|
||||||
|
|
||||||
b.HasKey("Id");
|
|
||||||
|
|
||||||
b.ToTable("Subscriptions");
|
|
||||||
});
|
|
||||||
#pragma warning restore 612, 618
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,140 +0,0 @@
|
|||||||
using System;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
using Microsoft.Extensions.Configuration;
|
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
namespace Newsbot.Collector.Database.Migrations
|
|
||||||
{
|
|
||||||
/// <inheritdoc />
|
|
||||||
public partial class MigrationFromGoose : Migration
|
|
||||||
{
|
|
||||||
/// <inheritdoc />
|
|
||||||
protected override void Up(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
migrationBuilder.CreateTable(
|
|
||||||
name: "Articles",
|
|
||||||
columns: table => new
|
|
||||||
{
|
|
||||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
|
||||||
SourceId = table.Column<Guid>(type: "uuid", nullable: false),
|
|
||||||
Tags = table.Column<string>(type: "text", nullable: false),
|
|
||||||
Title = table.Column<string>(type: "text", nullable: false),
|
|
||||||
Url = table.Column<string>(type: "text", nullable: true),
|
|
||||||
PubDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
|
|
||||||
Video = table.Column<string>(type: "text", nullable: false),
|
|
||||||
VideoHeight = table.Column<int>(type: "integer", nullable: false),
|
|
||||||
VideoWidth = table.Column<int>(type: "integer", nullable: false),
|
|
||||||
Thumbnail = table.Column<string>(type: "text", nullable: false),
|
|
||||||
Description = table.Column<string>(type: "text", nullable: false),
|
|
||||||
AuthorName = table.Column<string>(type: "text", nullable: false),
|
|
||||||
AuthorImage = table.Column<string>(type: "text", nullable: true),
|
|
||||||
CodeIsRelease = table.Column<bool>(type: "boolean", nullable: false),
|
|
||||||
CodeIsCommit = table.Column<bool>(type: "boolean", nullable: false)
|
|
||||||
},
|
|
||||||
constraints: table =>
|
|
||||||
{
|
|
||||||
table.PrimaryKey("PK_Articles", x => x.Id);
|
|
||||||
});
|
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
|
||||||
name: "DiscordQueue",
|
|
||||||
columns: table => new
|
|
||||||
{
|
|
||||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
|
||||||
ArticleId = table.Column<Guid>(type: "uuid", nullable: false)
|
|
||||||
},
|
|
||||||
constraints: table =>
|
|
||||||
{
|
|
||||||
table.PrimaryKey("PK_DiscordQueue", x => x.Id);
|
|
||||||
});
|
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
|
||||||
name: "DiscordWebhooks",
|
|
||||||
columns: table => new
|
|
||||||
{
|
|
||||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
|
||||||
Url = table.Column<string>(type: "text", nullable: false),
|
|
||||||
Server = table.Column<string>(type: "text", nullable: false),
|
|
||||||
Channel = table.Column<string>(type: "text", nullable: false),
|
|
||||||
Enabled = table.Column<bool>(type: "boolean", nullable: false)
|
|
||||||
},
|
|
||||||
constraints: table =>
|
|
||||||
{
|
|
||||||
table.PrimaryKey("PK_DiscordWebhooks", x => x.Id);
|
|
||||||
});
|
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
|
||||||
name: "Icons",
|
|
||||||
columns: table => new
|
|
||||||
{
|
|
||||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
|
||||||
FileName = table.Column<string>(type: "text", nullable: false),
|
|
||||||
Site = table.Column<string>(type: "text", nullable: false),
|
|
||||||
SourceId = table.Column<Guid>(type: "uuid", nullable: false)
|
|
||||||
},
|
|
||||||
constraints: table =>
|
|
||||||
{
|
|
||||||
table.PrimaryKey("PK_Icons", x => x.Id);
|
|
||||||
});
|
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
|
||||||
name: "Sources",
|
|
||||||
columns: table => new
|
|
||||||
{
|
|
||||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
|
||||||
Site = table.Column<string>(type: "text", nullable: false),
|
|
||||||
Name = table.Column<string>(type: "text", nullable: false),
|
|
||||||
Source = table.Column<string>(type: "text", nullable: false),
|
|
||||||
Type = table.Column<string>(type: "text", nullable: false),
|
|
||||||
Value = table.Column<string>(type: "text", nullable: false),
|
|
||||||
Enabled = table.Column<bool>(type: "boolean", nullable: false),
|
|
||||||
Url = table.Column<string>(type: "text", nullable: false),
|
|
||||||
Tags = table.Column<string>(type: "text", nullable: false),
|
|
||||||
Deleted = table.Column<bool>(type: "boolean", nullable: false),
|
|
||||||
YoutubeId = table.Column<string>(type: "text", nullable: false)
|
|
||||||
},
|
|
||||||
constraints: table =>
|
|
||||||
{
|
|
||||||
table.PrimaryKey("PK_Sources", x => x.Id);
|
|
||||||
});
|
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
|
||||||
name: "Subscriptions",
|
|
||||||
columns: table => new
|
|
||||||
{
|
|
||||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
|
||||||
CodeAllowReleases = table.Column<bool>(type: "boolean", nullable: false),
|
|
||||||
CodeAllowCommits = table.Column<bool>(type: "boolean", nullable: false),
|
|
||||||
SourceId = table.Column<Guid>(type: "uuid", nullable: false),
|
|
||||||
DiscordWebHookId = table.Column<Guid>(type: "uuid", nullable: false)
|
|
||||||
},
|
|
||||||
constraints: table =>
|
|
||||||
{
|
|
||||||
table.PrimaryKey("PK_Subscriptions", x => x.Id);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
protected override void Down(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
migrationBuilder.DropTable(
|
|
||||||
name: "Articles");
|
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
|
||||||
name: "DiscordQueue");
|
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
|
||||||
name: "DiscordWebhooks");
|
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
|
||||||
name: "Icons");
|
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
|
||||||
name: "Sources");
|
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
|
||||||
name: "Subscriptions");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,220 +0,0 @@
|
|||||||
// <auto-generated />
|
|
||||||
using System;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|
||||||
using Newsbot.Collector.Database;
|
|
||||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
namespace Newsbot.Collector.Database.Migrations
|
|
||||||
{
|
|
||||||
[DbContext(typeof(DatabaseContext))]
|
|
||||||
partial class DatabaseContextModelSnapshot : ModelSnapshot
|
|
||||||
{
|
|
||||||
protected override void BuildModel(ModelBuilder modelBuilder)
|
|
||||||
{
|
|
||||||
#pragma warning disable 612, 618
|
|
||||||
modelBuilder
|
|
||||||
.HasAnnotation("ProductVersion", "7.0.7")
|
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 63);
|
|
||||||
|
|
||||||
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
|
||||||
|
|
||||||
modelBuilder.Entity("Newsbot.Collector.Domain.Entities.ArticlesEntity", b =>
|
|
||||||
{
|
|
||||||
b.Property<Guid>("Id")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("uuid");
|
|
||||||
|
|
||||||
b.Property<string>("AuthorImage")
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("AuthorName")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<bool>("CodeIsCommit")
|
|
||||||
.HasColumnType("boolean");
|
|
||||||
|
|
||||||
b.Property<bool>("CodeIsRelease")
|
|
||||||
.HasColumnType("boolean");
|
|
||||||
|
|
||||||
b.Property<string>("Description")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<DateTime>("PubDate")
|
|
||||||
.HasColumnType("timestamp with time zone");
|
|
||||||
|
|
||||||
b.Property<Guid>("SourceId")
|
|
||||||
.HasColumnType("uuid");
|
|
||||||
|
|
||||||
b.Property<string>("Tags")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Thumbnail")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Title")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Url")
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Video")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<int>("VideoHeight")
|
|
||||||
.HasColumnType("integer");
|
|
||||||
|
|
||||||
b.Property<int>("VideoWidth")
|
|
||||||
.HasColumnType("integer");
|
|
||||||
|
|
||||||
b.HasKey("Id");
|
|
||||||
|
|
||||||
b.ToTable("Articles");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Newsbot.Collector.Domain.Entities.DiscordQueueEntity", b =>
|
|
||||||
{
|
|
||||||
b.Property<Guid>("Id")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("uuid");
|
|
||||||
|
|
||||||
b.Property<Guid>("ArticleId")
|
|
||||||
.HasColumnType("uuid");
|
|
||||||
|
|
||||||
b.HasKey("Id");
|
|
||||||
|
|
||||||
b.ToTable("DiscordQueue");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Newsbot.Collector.Domain.Entities.DiscordWebhookEntity", b =>
|
|
||||||
{
|
|
||||||
b.Property<Guid>("Id")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("uuid");
|
|
||||||
|
|
||||||
b.Property<string>("Channel")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<bool>("Enabled")
|
|
||||||
.HasColumnType("boolean");
|
|
||||||
|
|
||||||
b.Property<string>("Server")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Url")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.HasKey("Id");
|
|
||||||
|
|
||||||
b.ToTable("DiscordWebhooks");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Newsbot.Collector.Domain.Entities.IconEntity", b =>
|
|
||||||
{
|
|
||||||
b.Property<Guid>("Id")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("uuid");
|
|
||||||
|
|
||||||
b.Property<string>("FileName")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Site")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<Guid>("SourceId")
|
|
||||||
.HasColumnType("uuid");
|
|
||||||
|
|
||||||
b.HasKey("Id");
|
|
||||||
|
|
||||||
b.ToTable("Icons");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Newsbot.Collector.Domain.Entities.SourceEntity", b =>
|
|
||||||
{
|
|
||||||
b.Property<Guid>("Id")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("uuid");
|
|
||||||
|
|
||||||
b.Property<bool>("Deleted")
|
|
||||||
.HasColumnType("boolean");
|
|
||||||
|
|
||||||
b.Property<bool>("Enabled")
|
|
||||||
.HasColumnType("boolean");
|
|
||||||
|
|
||||||
b.Property<string>("Name")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Site")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Source")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Tags")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Type")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Url")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("Value")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.Property<string>("YoutubeId")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("text");
|
|
||||||
|
|
||||||
b.HasKey("Id");
|
|
||||||
|
|
||||||
b.ToTable("Sources");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Newsbot.Collector.Domain.Entities.SubscriptionEntity", b =>
|
|
||||||
{
|
|
||||||
b.Property<Guid>("Id")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("uuid");
|
|
||||||
|
|
||||||
b.Property<bool>("CodeAllowCommits")
|
|
||||||
.HasColumnType("boolean");
|
|
||||||
|
|
||||||
b.Property<bool>("CodeAllowReleases")
|
|
||||||
.HasColumnType("boolean");
|
|
||||||
|
|
||||||
b.Property<Guid>("DiscordWebHookId")
|
|
||||||
.HasColumnType("uuid");
|
|
||||||
|
|
||||||
b.Property<Guid>("SourceId")
|
|
||||||
.HasColumnType("uuid");
|
|
||||||
|
|
||||||
b.HasKey("Id");
|
|
||||||
|
|
||||||
b.ToTable("Subscriptions");
|
|
||||||
});
|
|
||||||
#pragma warning restore 612, 618
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -6,14 +6,8 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="dapper" Version="2.0.123" />
|
<PackageReference Include="dapper" Version="2.0.123" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.7" />
|
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.7">
|
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
|
||||||
<PrivateAssets>all</PrivateAssets>
|
|
||||||
</PackageReference>
|
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="7.0.0" />
|
<PackageReference Include="Microsoft.Extensions.Configuration" Version="7.0.0" />
|
||||||
<PackageReference Include="Npgsql" Version="7.0.4" />
|
<PackageReference Include="Npgsql" Version="7.0.2" />
|
||||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.4" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
using Newsbot.Collector.Domain.Entities;
|
|
||||||
using Newsbot.Collector.Domain.Models;
|
using Newsbot.Collector.Domain.Models;
|
||||||
|
|
||||||
namespace Newsbot.Collector.Domain.Dto;
|
namespace Newsbot.Collector.Domain.Dto;
|
||||||
@ -18,7 +17,7 @@ public class ArticleDto
|
|||||||
public string? Description { get; set; }
|
public string? Description { get; set; }
|
||||||
public string? AuthorName { get; set; }
|
public string? AuthorName { get; set; }
|
||||||
public string? AuthorImage { get; set; }
|
public string? AuthorImage { get; set; }
|
||||||
public static ArticleDto Convert(ArticlesModel article)
|
public static ArticleDto Convert(ArticlesModel article)
|
||||||
{
|
{
|
||||||
return new ArticleDto
|
return new ArticleDto
|
||||||
{
|
{
|
||||||
@ -37,24 +36,4 @@ public class ArticleDto
|
|||||||
AuthorImage = article.AuthorImage,
|
AuthorImage = article.AuthorImage,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ArticleDto Convert(ArticlesEntity article)
|
|
||||||
{
|
|
||||||
return new ArticleDto
|
|
||||||
{
|
|
||||||
ID = article.Id,
|
|
||||||
SourceID = article.SourceId,
|
|
||||||
Tags = article.Tags.Split(','),
|
|
||||||
Title = article.Title,
|
|
||||||
Url = article.Url,
|
|
||||||
PubDate = article.PubDate,
|
|
||||||
Video = article.Video,
|
|
||||||
VideoHeight = article.VideoHeight,
|
|
||||||
VideoWidth = article.VideoWidth,
|
|
||||||
Thumbnail = article.Thumbnail,
|
|
||||||
Description = article.Description,
|
|
||||||
AuthorName = article.AuthorName,
|
|
||||||
AuthorImage = article.AuthorImage,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -1,20 +0,0 @@
|
|||||||
namespace Newsbot.Collector.Domain.Entities;
|
|
||||||
|
|
||||||
public class ArticlesEntity
|
|
||||||
{
|
|
||||||
public Guid Id { get; set; }
|
|
||||||
public Guid SourceId { get; set; }
|
|
||||||
public string Tags { get; set; } = "";
|
|
||||||
public string Title { get; set; } = "";
|
|
||||||
public string? Url { get; set; }
|
|
||||||
public DateTime PubDate { get; set; } = DateTime.Now;
|
|
||||||
public string Video { get; set; } = "";
|
|
||||||
public int VideoHeight { get; set; } = 0;
|
|
||||||
public int VideoWidth { get; set; } = 0;
|
|
||||||
public string Thumbnail { get; set; } = "";
|
|
||||||
public string Description { get; set; } = "";
|
|
||||||
public string AuthorName { get; set; } = "";
|
|
||||||
public string? AuthorImage { get; set; }
|
|
||||||
public bool CodeIsRelease { get; set; }
|
|
||||||
public bool CodeIsCommit { get; set; }
|
|
||||||
}
|
|
@ -1,9 +0,0 @@
|
|||||||
namespace Newsbot.Collector.Domain.Entities;
|
|
||||||
|
|
||||||
public class AuthorEntity
|
|
||||||
{
|
|
||||||
public Guid Id { get; set; }
|
|
||||||
public Guid SourceId { get; set; }
|
|
||||||
public string Name { get; set; } = "";
|
|
||||||
public string Image { get; set; } = "";
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
namespace Newsbot.Collector.Domain.Entities;
|
|
||||||
|
|
||||||
public class DiscordQueueEntity
|
|
||||||
{
|
|
||||||
public Guid Id { get; set; }
|
|
||||||
public Guid ArticleId { get; set; }
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
namespace Newsbot.Collector.Domain.Entities;
|
|
||||||
|
|
||||||
public class DiscordWebhookEntity
|
|
||||||
{
|
|
||||||
public Guid Id { get; set; }
|
|
||||||
public string Url { get; set; } = "";
|
|
||||||
public string Server { get; set; } = "";
|
|
||||||
public string Channel { get; set; } = "";
|
|
||||||
public bool Enabled { get; set; }
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
namespace Newsbot.Collector.Domain.Entities;
|
|
||||||
|
|
||||||
public class IconEntity
|
|
||||||
{
|
|
||||||
public Guid Id { get; set; }
|
|
||||||
public string FileName { get; set; } = "";
|
|
||||||
public string Site { get; set; } = "";
|
|
||||||
|
|
||||||
public Guid SourceId { get; set; }
|
|
||||||
}
|
|
@ -1,18 +0,0 @@
|
|||||||
namespace Newsbot.Collector.Domain.Entities;
|
|
||||||
|
|
||||||
public class SourceEntity
|
|
||||||
{
|
|
||||||
public Guid Id { get; set; }
|
|
||||||
public string Site { get; set; } = "";
|
|
||||||
public string Name { get; set; } = "";
|
|
||||||
|
|
||||||
// Source use to define the worker to query with but moving to Type as it was not used really.
|
|
||||||
public string Source { get; set; } = "";
|
|
||||||
public string Type { get; set; } = "";
|
|
||||||
public string Value { get; set; } = "";
|
|
||||||
public bool Enabled { get; set; }
|
|
||||||
public string Url { get; set; } = "";
|
|
||||||
public string Tags { get; set; } = "";
|
|
||||||
public bool Deleted { get; set; }
|
|
||||||
public string YoutubeId { get; set; } = "";
|
|
||||||
}
|
|
@ -1,11 +0,0 @@
|
|||||||
namespace Newsbot.Collector.Domain.Entities;
|
|
||||||
|
|
||||||
public class SubscriptionEntity
|
|
||||||
{
|
|
||||||
public Guid Id { get; set; }
|
|
||||||
public bool CodeAllowReleases { get; set; }
|
|
||||||
public bool CodeAllowCommits { get; set; }
|
|
||||||
|
|
||||||
public Guid SourceId { get; set; }
|
|
||||||
public Guid DiscordWebHookId { get; set; }
|
|
||||||
}
|
|
@ -1,14 +1,13 @@
|
|||||||
using Newsbot.Collector.Domain.Entities;
|
|
||||||
using Newsbot.Collector.Domain.Models;
|
using Newsbot.Collector.Domain.Models;
|
||||||
|
|
||||||
namespace Newsbot.Collector.Domain.Interfaces;
|
namespace Newsbot.Collector.Domain.Interfaces;
|
||||||
|
|
||||||
public interface IArticlesRepository : ITableRepository
|
public interface IArticlesRepository : ITableRepository
|
||||||
{
|
{
|
||||||
List<ArticlesEntity> List(int page, int count);
|
List<ArticlesModel> List(int page, int count);
|
||||||
List<ArticlesModel> ListBySourceId(Guid id, int page = 0, int count = 25);
|
List<ArticlesModel> ListBySourceId(Guid id, int page = 0, int count = 25);
|
||||||
ArticlesModel GetById(Guid ID);
|
ArticlesModel GetById(Guid ID);
|
||||||
ArticlesModel GetByUrl(string url);
|
ArticlesModel GetByUrl(string url);
|
||||||
ArticlesEntity New(ArticlesEntity model);
|
ArticlesModel New(ArticlesModel model);
|
||||||
void DeleteAllBySourceId(Guid sourceId);
|
void DeleteAllBySourceId(Guid sourceId);
|
||||||
}
|
}
|
@ -1,18 +0,0 @@
|
|||||||
# docker compose -f docker-compose.dev.yaml up -d
|
|
||||||
|
|
||||||
version: "3"
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
db:
|
|
||||||
|
|
||||||
services:
|
|
||||||
db:
|
|
||||||
image: postgres:latest
|
|
||||||
environment:
|
|
||||||
POSTGRES_USER: postgres
|
|
||||||
POSTGRES_PASSWORD: postgres
|
|
||||||
POSTGRES_DB: postgres
|
|
||||||
ports:
|
|
||||||
- "5432:5432"
|
|
||||||
volumes:
|
|
||||||
- db:/var/lib/postgresql/data
|
|
@ -10,7 +10,7 @@ services:
|
|||||||
db:
|
db:
|
||||||
image: postgres:latest
|
image: postgres:latest
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_USER: ${PostgresUser}]
|
POSTGRES_USER: ${PostgresUser}
|
||||||
POSTGRES_PASSWORD: ${PostgresPassword}
|
POSTGRES_PASSWORD: ${PostgresPassword}
|
||||||
POSTGRES_DB: ${PostgresDatabaseName}
|
POSTGRES_DB: ${PostgresDatabaseName}
|
||||||
ports:
|
ports:
|
||||||
@ -25,6 +25,12 @@ services:
|
|||||||
timeout: "30s"
|
timeout: "30s"
|
||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
|
adminer:
|
||||||
|
image: adminer
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "8080:8080"
|
||||||
|
|
||||||
api:
|
api:
|
||||||
image: newsbot.collector:latest
|
image: newsbot.collector:latest
|
||||||
environment:
|
environment:
|
12
makefile
12
makefile
@ -21,9 +21,11 @@ docker-run: ## Runs the docker compose
|
|||||||
docker-migrate: ## Runs the migrations stored in the Docker image
|
docker-migrate: ## Runs the migrations stored in the Docker image
|
||||||
docker run -it --env-file .env ghcr.io/jtom38/newsbot.collector:master /app/goose --dir "/app/migrations" up
|
docker run -it --env-file .env ghcr.io/jtom38/newsbot.collector:master /app/goose --dir "/app/migrations" up
|
||||||
|
|
||||||
ef-build: ## Builds migration artifact
|
migrate-dev: ## Apply sql migrations to dev db
|
||||||
dotnet ef migrations bundle --project "Newsbot.Collector.Database"
|
goose -dir "./Newsbot.Collector.Database/Migrations" postgres "host=localhost user=postgres password=postgres dbname=postgres sslmode=disable" up
|
||||||
|
|
||||||
ef-migrate: ## Runs migrations based on the newest artifact
|
migrate-dev-down: ## revert sql migrations to dev db
|
||||||
dotnet ef migrations bundle --project "Newsbot.Collector.Database" --force
|
goose -dir "./Newsbot.Collector.Database/Migrations" postgres "host=localhost user=postgres password=postgres dbname=postgres sslmode=disable" down
|
||||||
./efbundle --connection "Host=localhost;Username=postgres;Password=postgres;Database=postgres;sslmode=disable"
|
|
||||||
|
migrate-refresh: ## Rolls back all migrations
|
||||||
|
goose -dir "./Newsbot.Collector.Database/Migrations" postgres "host=localhost user=postgres password=postgres dbname=postgres sslmode=disable" reset
|
||||||
|
Loading…
Reference in New Issue
Block a user