Compare commits
7 Commits
7cae2600ec
...
a343fa2d7f
Author | SHA1 | Date | |
---|---|---|---|
a343fa2d7f | |||
ae8b0266e5 | |||
bb8b3c4b74 | |||
79c4da89e4 | |||
eeb6327046 | |||
d2a5d2ed81 | |||
8149ce2151 |
2
.gitignore
vendored
2
.gitignore
vendored
@ -4,6 +4,8 @@
|
||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||
|
||||
seed.secrects.json
|
||||
efbundle
|
||||
efbundle.exe
|
||||
out/
|
||||
|
||||
#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
|
||||
|
||||
@ -26,9 +26,9 @@ ENV DOTNET_URLS=http://*:5000
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
RUN mkdir /migrations
|
||||
#RUN mkdir /migrations
|
||||
COPY --from=publish /app/build /app
|
||||
COPY --from=build ./app/Newsbot.Collector.Database/Migrations /app/migrations
|
||||
COPY --from=goose /go/bin/goose /app
|
||||
#COPY --from=build ./app/Newsbot.Collector.Database/Migrations /app/migrations
|
||||
#COPY --from=goose /go/bin/goose /app
|
||||
|
||||
CMD [ "dotnet", "Newsbot.Collector.Api.dll" ]
|
39
Newsbot.Collector.Database/DatabaseContext.cs
Normal file
39
Newsbot.Collector.Database/DatabaseContext.cs
Normal file
@ -0,0 +1,39 @@
|
||||
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)
|
||||
{
|
||||
}
|
||||
}
|
15
Newsbot.Collector.Database/DesignTimeContext.cs
Normal file
15
Newsbot.Collector.Database/DesignTimeContext.cs
Normal file
@ -0,0 +1,15 @@
|
||||
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);
|
||||
}
|
||||
}
|
223
Newsbot.Collector.Database/Migrations/20230619043102_MigrationFromGoose.Designer.cs
generated
Normal file
223
Newsbot.Collector.Database/Migrations/20230619043102_MigrationFromGoose.Designer.cs
generated
Normal file
@ -0,0 +1,223 @@
|
||||
// <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
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,140 @@
|
||||
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");
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,220 @@
|
||||
// <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,8 +6,14 @@
|
||||
|
||||
<ItemGroup>
|
||||
<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="Npgsql" Version="7.0.2" />
|
||||
<PackageReference Include="Npgsql" Version="7.0.4" />
|
||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.4" />
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
|
@ -1,3 +1,4 @@
|
||||
using Newsbot.Collector.Domain.Entities;
|
||||
using Newsbot.Collector.Domain.Models;
|
||||
|
||||
namespace Newsbot.Collector.Domain.Dto;
|
||||
@ -36,4 +37,24 @@ public class ArticleDto
|
||||
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,
|
||||
};
|
||||
}
|
||||
}
|
20
Newsbot.Collector.Domain/Entities/ArticlesEntity.cs
Normal file
20
Newsbot.Collector.Domain/Entities/ArticlesEntity.cs
Normal file
@ -0,0 +1,20 @@
|
||||
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; }
|
||||
}
|
9
Newsbot.Collector.Domain/Entities/AuthorEntity.cs
Normal file
9
Newsbot.Collector.Domain/Entities/AuthorEntity.cs
Normal file
@ -0,0 +1,9 @@
|
||||
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; } = "";
|
||||
}
|
7
Newsbot.Collector.Domain/Entities/DiscordQueueEntity.cs
Normal file
7
Newsbot.Collector.Domain/Entities/DiscordQueueEntity.cs
Normal file
@ -0,0 +1,7 @@
|
||||
namespace Newsbot.Collector.Domain.Entities;
|
||||
|
||||
public class DiscordQueueEntity
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public Guid ArticleId { get; set; }
|
||||
}
|
10
Newsbot.Collector.Domain/Entities/DiscordWebhookEntity.cs
Normal file
10
Newsbot.Collector.Domain/Entities/DiscordWebhookEntity.cs
Normal file
@ -0,0 +1,10 @@
|
||||
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; }
|
||||
}
|
10
Newsbot.Collector.Domain/Entities/IconEntity.cs
Normal file
10
Newsbot.Collector.Domain/Entities/IconEntity.cs
Normal file
@ -0,0 +1,10 @@
|
||||
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; }
|
||||
}
|
18
Newsbot.Collector.Domain/Entities/SourceEntity.cs
Normal file
18
Newsbot.Collector.Domain/Entities/SourceEntity.cs
Normal file
@ -0,0 +1,18 @@
|
||||
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; } = "";
|
||||
}
|
11
Newsbot.Collector.Domain/Entities/SubscriptionEntity.cs
Normal file
11
Newsbot.Collector.Domain/Entities/SubscriptionEntity.cs
Normal file
@ -0,0 +1,11 @@
|
||||
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,13 +1,14 @@
|
||||
using Newsbot.Collector.Domain.Entities;
|
||||
using Newsbot.Collector.Domain.Models;
|
||||
|
||||
namespace Newsbot.Collector.Domain.Interfaces;
|
||||
|
||||
public interface IArticlesRepository : ITableRepository
|
||||
{
|
||||
List<ArticlesModel> List(int page, int count);
|
||||
List<ArticlesEntity> List(int page, int count);
|
||||
List<ArticlesModel> ListBySourceId(Guid id, int page = 0, int count = 25);
|
||||
ArticlesModel GetById(Guid ID);
|
||||
ArticlesModel GetByUrl(string url);
|
||||
ArticlesModel New(ArticlesModel model);
|
||||
ArticlesEntity New(ArticlesEntity model);
|
||||
void DeleteAllBySourceId(Guid sourceId);
|
||||
}
|
18
docker-compose.dev.yaml
Normal file
18
docker-compose.dev.yaml
Normal file
@ -0,0 +1,18 @@
|
||||
# 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:
|
||||
image: postgres:latest
|
||||
environment:
|
||||
POSTGRES_USER: ${PostgresUser}
|
||||
POSTGRES_USER: ${PostgresUser}]
|
||||
POSTGRES_PASSWORD: ${PostgresPassword}
|
||||
POSTGRES_DB: ${PostgresDatabaseName}
|
||||
ports:
|
||||
@ -25,12 +25,6 @@ services:
|
||||
timeout: "30s"
|
||||
retries: 5
|
||||
|
||||
adminer:
|
||||
image: adminer
|
||||
restart: always
|
||||
ports:
|
||||
- "8080:8080"
|
||||
|
||||
api:
|
||||
image: newsbot.collector:latest
|
||||
environment:
|
12
makefile
12
makefile
@ -21,11 +21,9 @@ docker-run: ## Runs the docker compose
|
||||
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
|
||||
|
||||
migrate-dev: ## Apply sql migrations to dev db
|
||||
goose -dir "./Newsbot.Collector.Database/Migrations" postgres "host=localhost user=postgres password=postgres dbname=postgres sslmode=disable" up
|
||||
ef-build: ## Builds migration artifact
|
||||
dotnet ef migrations bundle --project "Newsbot.Collector.Database"
|
||||
|
||||
migrate-dev-down: ## revert sql migrations to dev db
|
||||
goose -dir "./Newsbot.Collector.Database/Migrations" postgres "host=localhost user=postgres password=postgres dbname=postgres sslmode=disable" down
|
||||
|
||||
migrate-refresh: ## Rolls back all migrations
|
||||
goose -dir "./Newsbot.Collector.Database/Migrations" postgres "host=localhost user=postgres password=postgres dbname=postgres sslmode=disable" reset
|
||||
ef-migrate: ## Runs migrations based on the newest artifact
|
||||
dotnet ef migrations bundle --project "Newsbot.Collector.Database" --force
|
||||
./efbundle --connection "Host=localhost;Username=postgres;Password=postgres;Database=postgres;sslmode=disable"
|
||||
|
Loading…
Reference in New Issue
Block a user