Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 33 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,43 @@
# ippppp
[Iplicit Ping Pong Personal Project](https://storageaccountip5b68a.z33.web.core.windows.net/)

# Accepting PRs! 👍

## Dev

## Goals
* learn / practice new skills (go full stack)
* try out frameworks / libraries / ideas on a small project
* play ping pong

## Database setup

## How to
* check open issues & raise new issues
* branch out
* submit PRs (pushing to master is disabled 🙈 to encourage PRs & reviews!)
* review other PRs / ask questions / review !
The `P5` connection string should be set in your user secrets file.

```
{
"ConnectionStrings": {
"P5": "Server=sqlserver; Database=####; Integrated Security=true;"
}
}
```


## Install .NET CLI EF Tools

```
dotnet tool install --global dotnet-ef
```


## Apply migrations

* Update database to latest:

```
dotnet database update
```


* Use `dotnet ef migrations add` to create a new migration.

Read more:
* https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/


## Links
Expand Down
36 changes: 36 additions & 0 deletions backend/Controllers/SessionPlayersController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using IP5.Model;
using IP5.Repositories;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;

namespace IP5.Controllers
{
[ApiController]
[Route("[controller]")]
public class SessionPlayersController : ControllerBase
{
private readonly ISessionPlayersRepository _sessionPlayersRepository;
private readonly ILogger<SessionPlayersController> _logger;

public SessionPlayersController(ISessionPlayersRepository sessionPlayersRepository, ILogger<SessionPlayersController> logger)
{
_logger = logger;
_sessionPlayersRepository = sessionPlayersRepository;
}

[HttpGet]
public async IAsyncEnumerable<SessionPlayer> GetAll()
{
await foreach (var sessionPlayer in _sessionPlayersRepository.GetAll())
yield return sessionPlayer;
}

[HttpPut]
public void Create(SessionPlayer sessionPlayer)
{
_sessionPlayersRepository.Add(sessionPlayer);
}
}
}
43 changes: 43 additions & 0 deletions backend/Controllers/SessionsController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using IP5.Model;
using IP5.Repositories;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;

namespace IP5.Controllers
{
[ApiController]
[Route("[controller]")]
public class SessionsController : ControllerBase
{
private readonly ISessionsRepository _sessionRepository;
private readonly ILogger<SessionsController> _logger;

public SessionsController(ISessionsRepository sessionRepository, ILogger<SessionsController> logger)
{
_logger = logger;
_sessionRepository = sessionRepository;
}

[HttpPut]
public void Create(Session session)
{
_sessionRepository.Add(session);
}

[HttpGet]
public async IAsyncEnumerable<Session> GetAll()
{
await foreach (var session in _sessionRepository.GetAll())
yield return session;
}

[HttpGet("{code}")]
public Task<Session> GetByCode([FromRoute] string code)
{
return _sessionRepository.Get(code);
}

}
}
97 changes: 97 additions & 0 deletions backend/Migrations/20200226143151_InitialCreate.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

30 changes: 30 additions & 0 deletions backend/Migrations/20200226143151_InitialCreate.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;

namespace IP5.Migrations
{
public partial class InitialCreate : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "player",
columns: table => new
{
Id = table.Column<Guid>(nullable: false),
Name = table.Column<string>(nullable: true),
Email = table.Column<string>(nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_player", x => x.Id);
});
}

protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "player");
}
}
}
41 changes: 41 additions & 0 deletions backend/Migrations/PingPongContextModelSnapshot.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// <auto-generated />
using System;
using IP5.Repositories;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;

namespace IP5.Migrations
{
[DbContext(typeof(PingPongContext))]
partial class PingPongContextModelSnapshot : ModelSnapshot
{
protected override void BuildModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "3.1.1")
.HasAnnotation("Relational:MaxIdentifierLength", 128)
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

modelBuilder.Entity("IP5.Repositories.DbPlayer", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");

b.Property<string>("Email")
.HasColumnType("nvarchar(max)");

b.Property<string>("Name")
.HasColumnType("nvarchar(max)");

b.HasKey("Id");

b.ToTable("player");
});
#pragma warning restore 612, 618
}
}
}
14 changes: 14 additions & 0 deletions backend/Model/Session.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System.Collections.Generic;

namespace IP5.Model
{
public class Session
{
public string Code { get; set; }
public string Description { get; set; }
public int MinGamesRequired { get; set; }
public bool IsActive { get; set; }

public List<SessionPlayer> SessionPlayers { get; set; }
}
}
14 changes: 14 additions & 0 deletions backend/Model/SessionPlayer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;

namespace IP5.Model
{
public class SessionPlayer
{
public Guid SessionId { get; set; }
public Guid PlayerId { get; set; }

public Session Session { get; set; }
public Player Player { get; set; }
}
}
4 changes: 3 additions & 1 deletion backend/Repositories/DbPlayer.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;

namespace IP5.Repositories
{
Expand All @@ -7,7 +8,8 @@ public class DbPlayer
public Guid Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
}

public List<DbSessionPlayer> SessionPlayers { get; set; }

}
}
21 changes: 21 additions & 0 deletions backend/Repositories/DbSession.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using IP5.Model;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;

namespace IP5.Repositories
{
public class DbSession
{
public Guid Id { get; set; }
public string Description { get; set; }

[Column("is_active")]
public bool IsActive { get; set; }

[Column("min_games_required")]
public int MinGamesRequired { get; set; }

public List<DbSessionPlayer> SessionPlayers { get; set; }
}
}
21 changes: 21 additions & 0 deletions backend/Repositories/DbSessionPlayer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using IP5.Model;
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace IP5.Repositories
{
public class DbSessionPlayer
{
//fixme this table doesn't contain any primary key
[Key]
[Column("session_id")]
public Guid SessionId { get; set; }

[Column("player_id")]
public Guid PlayerId { get; set; }

public DbSession Session { get; set; }
public DbPlayer Player { get; set; }
}
}
Loading