Skip to content

Commit

Permalink
Merge pull request #22 from murl-digital/development
Browse files Browse the repository at this point in the history
v1.2.0
  • Loading branch information
murl-digital committed Sep 10, 2021
2 parents de84080 + 828d284 commit acc8354
Show file tree
Hide file tree
Showing 27 changed files with 1,303 additions and 188 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/verify.yml → .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Verify
name: CI

on:
push:
Expand Down Expand Up @@ -32,7 +32,7 @@ jobs:
uses: akhileshns/heroku-deploy@v3.6.8
with:
heroku_api_key: ${{secrets.HEROKU_API_KEY}}
heroku_app_name: "garbage-can-test"
heroku_app_name: "garbage-can"
heroku_email: ${{secrets.HEROKU_EMAIL}}
usedocker: true
docker_heroku_process_type: web
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
using GarbageCan.Domain.Entities.Boosters;
using System.Threading;
using System.Threading.Tasks;
using GarbageCan.Domain.Entities.Boosters;
using GarbageCan.Domain.Entities.Config;
using GarbageCan.Domain.Entities.Moderation;
using GarbageCan.Domain.Entities.Presence;
using GarbageCan.Domain.Entities.Roles;
using GarbageCan.Domain.Entities.XP;
using Microsoft.EntityFrameworkCore;
using System.Threading;
using System.Threading.Tasks;

namespace GarbageCan.Application.Common.Interfaces
{
Expand All @@ -26,7 +27,8 @@ public interface IApplicationDbContext
public DbSet<QueuedBooster> XPQueuedBoosters { get; set; }
public DbSet<UserBooster> XPUserBoosters { get; set; }
public DbSet<User> XPUsers { get; set; }
public DbSet<CustomStatus> CustomStatuses { get; set; }

Task<int> SaveChangesAsync(CancellationToken cancellationToken);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using System.Threading.Tasks;
using GarbageCan.Domain.Enums;

namespace GarbageCan.Application.Common.Interfaces
{
public interface IDiscordPresenceService
{
public Task ChangeStatusAsync(string name, Activity activity);
}
}
1 change: 1 addition & 0 deletions GarbageCan.Application/Common/Interfaces/IRngService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@ public interface IRngService
{
public double NormalSample { get; }
float FloatFromRange(float lower, float higher);
int IntFromRange(int lower, int higher);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using System.Threading;
using System.Threading.Tasks;
using GarbageCan.Application.Common.Interfaces;
using GarbageCan.Domain.Entities.Presence;
using GarbageCan.Domain.Enums;
using MediatR;

namespace GarbageCan.Application.Fun.Commands.RandomStatus
{
public class AddStatusCommand : IRequest
{
public string Name { get; set; }
public Activity Activity { get; set; }
}

public class AddStatusCommandHandler : IRequestHandler<AddStatusCommand>
{
private readonly IApplicationDbContext _context;

public AddStatusCommandHandler(IApplicationDbContext context)
{
_context = context;
}

public async Task<Unit> Handle(AddStatusCommand request, CancellationToken cancellationToken)
{
_context.CustomStatuses.Add(new CustomStatus
{
Name = request.Name,
Activity = request.Activity
});
await _context.SaveChangesAsync(cancellationToken);

return Unit.Value;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
using System.Threading;
using System.Threading.Tasks;
using GarbageCan.Application.Common.Interfaces;
using MediatR;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;

namespace GarbageCan.Application.Fun.Commands.RandomStatus
{
public class RandomizeStatusCommand : IRequest
{
}

public class RandomizeStatusCommandHandler : IRequestHandler<RandomizeStatusCommand>
{
private readonly IDiscordConfiguration _configuration;
private readonly IRngService _rngService;
private readonly IDiscordPresenceService _presenceService;
private readonly ILogger<RandomizeStatusCommandHandler> _logger;
private readonly IApplicationDbContext _context;

public RandomizeStatusCommandHandler(IDiscordConfiguration configuration, IRngService rngService,
IDiscordPresenceService presenceService, ILogger<RandomizeStatusCommandHandler> logger,
IApplicationDbContext context)
{
_configuration = configuration;
_rngService = rngService;
_context = context;
_presenceService = presenceService;
_logger = logger;
}

public async Task<Unit> Handle(RandomizeStatusCommand request, CancellationToken cancellationToken)
{
var prefix = _configuration.CommandPrefix;
var dbList = await _context.CustomStatuses.ToArrayAsync(cancellationToken);
var activity = dbList[_rngService.IntFromRange(0, dbList.Length)];
_logger.LogDebug("i choose {Name}", activity.Name);

await _presenceService.ChangeStatusAsync($"{activity.Name} | {prefix}help", activity.Activity);

return Unit.Value;
}
}
}
26 changes: 13 additions & 13 deletions GarbageCan.Application/GarbageCan.Application.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,19 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="AutoMapper" Version="10.1.1"/>
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="8.1.1"/>
<PackageReference Include="FluentValidation" Version="10.3.3"/>
<PackageReference Include="FluentValidation.DependencyInjectionExtensions" Version="10.3.3"/>
<PackageReference Include="MediatR" Version="9.0.0"/>
<PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="9.0.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.9"/>
<PackageReference Include="Humanizer.Core" Version="2.11.10"/>
<PackageReference Include="SixLabors.Fonts" Version="1.0.0-beta0013"/>
<PackageReference Include="SixLabors.ImageSharp" Version="1.0.3"/>
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta11"/>
<PackageReference Include="Z.EntityFramework.Plus.EFCore" Version="5.2.9"/>
</ItemGroup>
<PackageReference Include="AutoMapper" Version="10.1.1"/>
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="8.1.1"/>
<PackageReference Include="FluentValidation" Version="10.3.3"/>
<PackageReference Include="FluentValidation.DependencyInjectionExtensions" Version="10.3.3"/>
<PackageReference Include="MediatR" Version="9.0.0"/>
<PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="9.0.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.9"/>
<PackageReference Include="Humanizer.Core" Version="2.11.10"/>
<PackageReference Include="SixLabors.Fonts" Version="1.0.0-beta0013"/>
<PackageReference Include="SixLabors.ImageSharp" Version="1.0.3"/>
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta11"/>
<PackageReference Include="Z.EntityFramework.Plus.EFCore" Version="5.2.9"/>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\GarbageCan.Domain\GarbageCan.Domain.csproj" />
Expand Down
11 changes: 11 additions & 0 deletions GarbageCan.Domain/Entities/Presence/CustomStatus.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using GarbageCan.Domain.Enums;

namespace GarbageCan.Domain.Entities.Presence
{
public class CustomStatus
{
public int Id { get; set; }
public Activity Activity { get; set; }
public string Name { get; set; }
}
}
11 changes: 11 additions & 0 deletions GarbageCan.Domain/Enums/Activity.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
namespace GarbageCan.Domain.Enums
{
public enum Activity
{
Playing,
Streaming,
ListeningTo,
Watching,
Competing
}
}
1 change: 1 addition & 0 deletions GarbageCan.Infrastructure/DependencyInjection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ public static IServiceCollection AddInfrastructure(this IServiceCollection servi
services.AddTransient<IDiscordDirectMessageService, DiscordDirectMessageService>();
services.AddTransient<IDiscordMessageService, DiscordMessageService>();
services.AddTransient<IDiscordWebhookService, DiscordWebhookService>();
services.AddTransient<IDiscordPresenceService, DiscordPresenceService>();
services.AddScoped<DiscordCommandContextService>();

services.AddSingleton<ITemplateFileProvider>(new TemplateFileProvider());
Expand Down
27 changes: 27 additions & 0 deletions GarbageCan.Infrastructure/Discord/DiscordPresenceService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using System;
using System.Threading.Tasks;
using DSharpPlus;
using DSharpPlus.Entities;
using GarbageCan.Application.Common.Interfaces;
using GarbageCan.Domain.Enums;

namespace GarbageCan.Infrastructure.Discord
{
public class DiscordPresenceService : IDiscordPresenceService
{
private readonly DiscordClient _client;

public DiscordPresenceService(DiscordClient client)
{
_client = client;
}

public async Task ChangeStatusAsync(string name, Activity activity)
{
if (!Enum.TryParse(activity.ToString(), out ActivityType discordActivity))
throw new InvalidOperationException("Parsing activity type failed");

await _client.UpdateStatusAsync(new DiscordActivity(name, discordActivity));
}
}
}
80 changes: 41 additions & 39 deletions GarbageCan.Infrastructure/Persistence/ApplicationDbContext.cs
Original file line number Diff line number Diff line change
@@ -1,39 +1,41 @@
using GarbageCan.Application.Common.Interfaces;
using GarbageCan.Domain.Entities.Boosters;
using GarbageCan.Domain.Entities.Config;
using GarbageCan.Domain.Entities.Moderation;
using GarbageCan.Domain.Entities.Roles;
using GarbageCan.Domain.Entities.XP;
using Microsoft.EntityFrameworkCore;

namespace GarbageCan.Infrastructure.Persistence
{
public class ApplicationDbContext : DbContext, IApplicationDbContext
{
public ApplicationDbContext(DbContextOptions options) : base(options)
{
}

public DbSet<ConditionalRole> ConditionalRoles { get; set; }
public DbSet<Config> Config { get; set; }
public DbSet<JoinRole> JoinRoles { get; set; }
public DbSet<WatchedUser> JoinWatchlist { get; set; }
public DbSet<LevelRole> LevelRoles { get; set; }
public DbSet<ActionLog> ModerationActionLogs { get; set; }
public DbSet<ActiveChannelRestrict> ModerationActiveChannelRestricts { get; set; }
public DbSet<ActiveMute> ModerationActiveMutes { get; set; }
public DbSet<ReactionRole> ReactionRoles { get; set; }
public DbSet<ActiveBooster> XPActiveBoosters { get; set; }
public DbSet<AvailableSlot> XPAvailableSlots { get; set; }
public DbSet<ExcludedChannel> XPExcludedChannels { get; set; }
public DbSet<QueuedBooster> XPQueuedBoosters { get; set; }
public DbSet<UserBooster> XPUserBoosters { get; set; }
public DbSet<User> XPUsers { get; set; }

protected override void OnModelCreating(ModelBuilder builder)
{
builder.ApplyConfigurationsFromAssembly(typeof(ApplicationDbContext).Assembly);
base.OnModelCreating(builder);
}
}
}
using GarbageCan.Application.Common.Interfaces;
using GarbageCan.Domain.Entities.Boosters;
using GarbageCan.Domain.Entities.Config;
using GarbageCan.Domain.Entities.Moderation;
using GarbageCan.Domain.Entities.Presence;
using GarbageCan.Domain.Entities.Roles;
using GarbageCan.Domain.Entities.XP;
using Microsoft.EntityFrameworkCore;

namespace GarbageCan.Infrastructure.Persistence
{
public class ApplicationDbContext : DbContext, IApplicationDbContext
{
public ApplicationDbContext(DbContextOptions options) : base(options)
{
}

public DbSet<ConditionalRole> ConditionalRoles { get; set; }
public DbSet<Config> Config { get; set; }
public DbSet<JoinRole> JoinRoles { get; set; }
public DbSet<WatchedUser> JoinWatchlist { get; set; }
public DbSet<LevelRole> LevelRoles { get; set; }
public DbSet<ActionLog> ModerationActionLogs { get; set; }
public DbSet<ActiveChannelRestrict> ModerationActiveChannelRestricts { get; set; }
public DbSet<ActiveMute> ModerationActiveMutes { get; set; }
public DbSet<ReactionRole> ReactionRoles { get; set; }
public DbSet<ActiveBooster> XPActiveBoosters { get; set; }
public DbSet<AvailableSlot> XPAvailableSlots { get; set; }
public DbSet<ExcludedChannel> XPExcludedChannels { get; set; }
public DbSet<QueuedBooster> XPQueuedBoosters { get; set; }
public DbSet<UserBooster> XPUserBoosters { get; set; }
public DbSet<User> XPUsers { get; set; }
public DbSet<CustomStatus> CustomStatuses { get; set; }

protected override void OnModelCreating(ModelBuilder builder)
{
builder.ApplyConfigurationsFromAssembly(typeof(ApplicationDbContext).Assembly);
base.OnModelCreating(builder);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using GarbageCan.Domain.Entities.Presence;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;

namespace GarbageCan.Infrastructure.Persistence.Configurations
{
public class CustomStatusConfiguration : IEntityTypeConfiguration<CustomStatus>
{
public void Configure(EntityTypeBuilder<CustomStatus> builder)
{
builder.ToTable("customStatuses");
builder.HasKey(t => t.Id);
builder.Property(t => t.Activity).HasColumnName("activity");
builder.Property(t => t.Name).HasColumnName("name");
}
}
}
Loading

0 comments on commit acc8354

Please sign in to comment.