Add project files.
This commit is contained in:
63
.gitattributes
vendored
Normal file
63
.gitattributes
vendored
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
###############################################################################
|
||||||
|
# Set default behavior to automatically normalize line endings.
|
||||||
|
###############################################################################
|
||||||
|
* text=auto
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Set default behavior for command prompt diff.
|
||||||
|
#
|
||||||
|
# This is need for earlier builds of msysgit that does not have it on by
|
||||||
|
# default for csharp files.
|
||||||
|
# Note: This is only used by command line
|
||||||
|
###############################################################################
|
||||||
|
#*.cs diff=csharp
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Set the merge driver for project and solution files
|
||||||
|
#
|
||||||
|
# Merging from the command prompt will add diff markers to the files if there
|
||||||
|
# are conflicts (Merging from VS is not affected by the settings below, in VS
|
||||||
|
# the diff markers are never inserted). Diff markers may cause the following
|
||||||
|
# file extensions to fail to load in VS. An alternative would be to treat
|
||||||
|
# these files as binary and thus will always conflict and require user
|
||||||
|
# intervention with every merge. To do so, just uncomment the entries below
|
||||||
|
###############################################################################
|
||||||
|
#*.sln merge=binary
|
||||||
|
#*.csproj merge=binary
|
||||||
|
#*.vbproj merge=binary
|
||||||
|
#*.vcxproj merge=binary
|
||||||
|
#*.vcproj merge=binary
|
||||||
|
#*.dbproj merge=binary
|
||||||
|
#*.fsproj merge=binary
|
||||||
|
#*.lsproj merge=binary
|
||||||
|
#*.wixproj merge=binary
|
||||||
|
#*.modelproj merge=binary
|
||||||
|
#*.sqlproj merge=binary
|
||||||
|
#*.wwaproj merge=binary
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# behavior for image files
|
||||||
|
#
|
||||||
|
# image files are treated as binary by default.
|
||||||
|
###############################################################################
|
||||||
|
#*.jpg binary
|
||||||
|
#*.png binary
|
||||||
|
#*.gif binary
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# diff behavior for common document formats
|
||||||
|
#
|
||||||
|
# Convert binary document formats to text before diffing them. This feature
|
||||||
|
# is only available from the command line. Turn it on by uncommenting the
|
||||||
|
# entries below.
|
||||||
|
###############################################################################
|
||||||
|
#*.doc diff=astextplain
|
||||||
|
#*.DOC diff=astextplain
|
||||||
|
#*.docx diff=astextplain
|
||||||
|
#*.DOCX diff=astextplain
|
||||||
|
#*.dot diff=astextplain
|
||||||
|
#*.DOT diff=astextplain
|
||||||
|
#*.pdf diff=astextplain
|
||||||
|
#*.PDF diff=astextplain
|
||||||
|
#*.rtf diff=astextplain
|
||||||
|
#*.RTF diff=astextplain
|
||||||
363
.gitignore
vendored
Normal file
363
.gitignore
vendored
Normal file
@ -0,0 +1,363 @@
|
|||||||
|
## Ignore Visual Studio temporary files, build results, and
|
||||||
|
## files generated by popular Visual Studio add-ons.
|
||||||
|
##
|
||||||
|
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||||
|
|
||||||
|
# User-specific files
|
||||||
|
*.rsuser
|
||||||
|
*.suo
|
||||||
|
*.user
|
||||||
|
*.userosscache
|
||||||
|
*.sln.docstates
|
||||||
|
|
||||||
|
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||||
|
*.userprefs
|
||||||
|
|
||||||
|
# Mono auto generated files
|
||||||
|
mono_crash.*
|
||||||
|
|
||||||
|
# Build results
|
||||||
|
[Dd]ebug/
|
||||||
|
[Dd]ebugPublic/
|
||||||
|
[Rr]elease/
|
||||||
|
[Rr]eleases/
|
||||||
|
x64/
|
||||||
|
x86/
|
||||||
|
[Ww][Ii][Nn]32/
|
||||||
|
[Aa][Rr][Mm]/
|
||||||
|
[Aa][Rr][Mm]64/
|
||||||
|
bld/
|
||||||
|
[Bb]in/
|
||||||
|
[Oo]bj/
|
||||||
|
[Oo]ut/
|
||||||
|
[Ll]og/
|
||||||
|
[Ll]ogs/
|
||||||
|
|
||||||
|
# Visual Studio 2015/2017 cache/options directory
|
||||||
|
.vs/
|
||||||
|
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||||
|
#wwwroot/
|
||||||
|
|
||||||
|
# Visual Studio 2017 auto generated files
|
||||||
|
Generated\ Files/
|
||||||
|
|
||||||
|
# MSTest test Results
|
||||||
|
[Tt]est[Rr]esult*/
|
||||||
|
[Bb]uild[Ll]og.*
|
||||||
|
|
||||||
|
# NUnit
|
||||||
|
*.VisualState.xml
|
||||||
|
TestResult.xml
|
||||||
|
nunit-*.xml
|
||||||
|
|
||||||
|
# Build Results of an ATL Project
|
||||||
|
[Dd]ebugPS/
|
||||||
|
[Rr]eleasePS/
|
||||||
|
dlldata.c
|
||||||
|
|
||||||
|
# Benchmark Results
|
||||||
|
BenchmarkDotNet.Artifacts/
|
||||||
|
|
||||||
|
# .NET Core
|
||||||
|
project.lock.json
|
||||||
|
project.fragment.lock.json
|
||||||
|
artifacts/
|
||||||
|
|
||||||
|
# ASP.NET Scaffolding
|
||||||
|
ScaffoldingReadMe.txt
|
||||||
|
|
||||||
|
# StyleCop
|
||||||
|
StyleCopReport.xml
|
||||||
|
|
||||||
|
# Files built by Visual Studio
|
||||||
|
*_i.c
|
||||||
|
*_p.c
|
||||||
|
*_h.h
|
||||||
|
*.ilk
|
||||||
|
*.meta
|
||||||
|
*.obj
|
||||||
|
*.iobj
|
||||||
|
*.pch
|
||||||
|
*.pdb
|
||||||
|
*.ipdb
|
||||||
|
*.pgc
|
||||||
|
*.pgd
|
||||||
|
*.rsp
|
||||||
|
*.sbr
|
||||||
|
*.tlb
|
||||||
|
*.tli
|
||||||
|
*.tlh
|
||||||
|
*.tmp
|
||||||
|
*.tmp_proj
|
||||||
|
*_wpftmp.csproj
|
||||||
|
*.log
|
||||||
|
*.vspscc
|
||||||
|
*.vssscc
|
||||||
|
.builds
|
||||||
|
*.pidb
|
||||||
|
*.svclog
|
||||||
|
*.scc
|
||||||
|
|
||||||
|
# Chutzpah Test files
|
||||||
|
_Chutzpah*
|
||||||
|
|
||||||
|
# Visual C++ cache files
|
||||||
|
ipch/
|
||||||
|
*.aps
|
||||||
|
*.ncb
|
||||||
|
*.opendb
|
||||||
|
*.opensdf
|
||||||
|
*.sdf
|
||||||
|
*.cachefile
|
||||||
|
*.VC.db
|
||||||
|
*.VC.VC.opendb
|
||||||
|
|
||||||
|
# Visual Studio profiler
|
||||||
|
*.psess
|
||||||
|
*.vsp
|
||||||
|
*.vspx
|
||||||
|
*.sap
|
||||||
|
|
||||||
|
# Visual Studio Trace Files
|
||||||
|
*.e2e
|
||||||
|
|
||||||
|
# TFS 2012 Local Workspace
|
||||||
|
$tf/
|
||||||
|
|
||||||
|
# Guidance Automation Toolkit
|
||||||
|
*.gpState
|
||||||
|
|
||||||
|
# ReSharper is a .NET coding add-in
|
||||||
|
_ReSharper*/
|
||||||
|
*.[Rr]e[Ss]harper
|
||||||
|
*.DotSettings.user
|
||||||
|
|
||||||
|
# TeamCity is a build add-in
|
||||||
|
_TeamCity*
|
||||||
|
|
||||||
|
# DotCover is a Code Coverage Tool
|
||||||
|
*.dotCover
|
||||||
|
|
||||||
|
# AxoCover is a Code Coverage Tool
|
||||||
|
.axoCover/*
|
||||||
|
!.axoCover/settings.json
|
||||||
|
|
||||||
|
# Coverlet is a free, cross platform Code Coverage Tool
|
||||||
|
coverage*.json
|
||||||
|
coverage*.xml
|
||||||
|
coverage*.info
|
||||||
|
|
||||||
|
# Visual Studio code coverage results
|
||||||
|
*.coverage
|
||||||
|
*.coveragexml
|
||||||
|
|
||||||
|
# NCrunch
|
||||||
|
_NCrunch_*
|
||||||
|
.*crunch*.local.xml
|
||||||
|
nCrunchTemp_*
|
||||||
|
|
||||||
|
# MightyMoose
|
||||||
|
*.mm.*
|
||||||
|
AutoTest.Net/
|
||||||
|
|
||||||
|
# Web workbench (sass)
|
||||||
|
.sass-cache/
|
||||||
|
|
||||||
|
# Installshield output folder
|
||||||
|
[Ee]xpress/
|
||||||
|
|
||||||
|
# DocProject is a documentation generator add-in
|
||||||
|
DocProject/buildhelp/
|
||||||
|
DocProject/Help/*.HxT
|
||||||
|
DocProject/Help/*.HxC
|
||||||
|
DocProject/Help/*.hhc
|
||||||
|
DocProject/Help/*.hhk
|
||||||
|
DocProject/Help/*.hhp
|
||||||
|
DocProject/Help/Html2
|
||||||
|
DocProject/Help/html
|
||||||
|
|
||||||
|
# Click-Once directory
|
||||||
|
publish/
|
||||||
|
|
||||||
|
# Publish Web Output
|
||||||
|
*.[Pp]ublish.xml
|
||||||
|
*.azurePubxml
|
||||||
|
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||||
|
# but database connection strings (with potential passwords) will be unencrypted
|
||||||
|
*.pubxml
|
||||||
|
*.publishproj
|
||||||
|
|
||||||
|
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||||
|
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||||
|
# in these scripts will be unencrypted
|
||||||
|
PublishScripts/
|
||||||
|
|
||||||
|
# NuGet Packages
|
||||||
|
*.nupkg
|
||||||
|
# NuGet Symbol Packages
|
||||||
|
*.snupkg
|
||||||
|
# The packages folder can be ignored because of Package Restore
|
||||||
|
**/[Pp]ackages/*
|
||||||
|
# except build/, which is used as an MSBuild target.
|
||||||
|
!**/[Pp]ackages/build/
|
||||||
|
# Uncomment if necessary however generally it will be regenerated when needed
|
||||||
|
#!**/[Pp]ackages/repositories.config
|
||||||
|
# NuGet v3's project.json files produces more ignorable files
|
||||||
|
*.nuget.props
|
||||||
|
*.nuget.targets
|
||||||
|
|
||||||
|
# Microsoft Azure Build Output
|
||||||
|
csx/
|
||||||
|
*.build.csdef
|
||||||
|
|
||||||
|
# Microsoft Azure Emulator
|
||||||
|
ecf/
|
||||||
|
rcf/
|
||||||
|
|
||||||
|
# Windows Store app package directories and files
|
||||||
|
AppPackages/
|
||||||
|
BundleArtifacts/
|
||||||
|
Package.StoreAssociation.xml
|
||||||
|
_pkginfo.txt
|
||||||
|
*.appx
|
||||||
|
*.appxbundle
|
||||||
|
*.appxupload
|
||||||
|
|
||||||
|
# Visual Studio cache files
|
||||||
|
# files ending in .cache can be ignored
|
||||||
|
*.[Cc]ache
|
||||||
|
# but keep track of directories ending in .cache
|
||||||
|
!?*.[Cc]ache/
|
||||||
|
|
||||||
|
# Others
|
||||||
|
ClientBin/
|
||||||
|
~$*
|
||||||
|
*~
|
||||||
|
*.dbmdl
|
||||||
|
*.dbproj.schemaview
|
||||||
|
*.jfm
|
||||||
|
*.pfx
|
||||||
|
*.publishsettings
|
||||||
|
orleans.codegen.cs
|
||||||
|
|
||||||
|
# Including strong name files can present a security risk
|
||||||
|
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||||
|
#*.snk
|
||||||
|
|
||||||
|
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||||
|
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||||
|
#bower_components/
|
||||||
|
|
||||||
|
# RIA/Silverlight projects
|
||||||
|
Generated_Code/
|
||||||
|
|
||||||
|
# Backup & report files from converting an old project file
|
||||||
|
# to a newer Visual Studio version. Backup files are not needed,
|
||||||
|
# because we have git ;-)
|
||||||
|
_UpgradeReport_Files/
|
||||||
|
Backup*/
|
||||||
|
UpgradeLog*.XML
|
||||||
|
UpgradeLog*.htm
|
||||||
|
ServiceFabricBackup/
|
||||||
|
*.rptproj.bak
|
||||||
|
|
||||||
|
# SQL Server files
|
||||||
|
*.mdf
|
||||||
|
*.ldf
|
||||||
|
*.ndf
|
||||||
|
|
||||||
|
# Business Intelligence projects
|
||||||
|
*.rdl.data
|
||||||
|
*.bim.layout
|
||||||
|
*.bim_*.settings
|
||||||
|
*.rptproj.rsuser
|
||||||
|
*- [Bb]ackup.rdl
|
||||||
|
*- [Bb]ackup ([0-9]).rdl
|
||||||
|
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||||
|
|
||||||
|
# Microsoft Fakes
|
||||||
|
FakesAssemblies/
|
||||||
|
|
||||||
|
# GhostDoc plugin setting file
|
||||||
|
*.GhostDoc.xml
|
||||||
|
|
||||||
|
# Node.js Tools for Visual Studio
|
||||||
|
.ntvs_analysis.dat
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# Visual Studio 6 build log
|
||||||
|
*.plg
|
||||||
|
|
||||||
|
# Visual Studio 6 workspace options file
|
||||||
|
*.opt
|
||||||
|
|
||||||
|
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||||
|
*.vbw
|
||||||
|
|
||||||
|
# Visual Studio LightSwitch build output
|
||||||
|
**/*.HTMLClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/ModelManifest.xml
|
||||||
|
**/*.Server/GeneratedArtifacts
|
||||||
|
**/*.Server/ModelManifest.xml
|
||||||
|
_Pvt_Extensions
|
||||||
|
|
||||||
|
# Paket dependency manager
|
||||||
|
.paket/paket.exe
|
||||||
|
paket-files/
|
||||||
|
|
||||||
|
# FAKE - F# Make
|
||||||
|
.fake/
|
||||||
|
|
||||||
|
# CodeRush personal settings
|
||||||
|
.cr/personal
|
||||||
|
|
||||||
|
# Python Tools for Visual Studio (PTVS)
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
|
||||||
|
# Cake - Uncomment if you are using it
|
||||||
|
# tools/**
|
||||||
|
# !tools/packages.config
|
||||||
|
|
||||||
|
# Tabs Studio
|
||||||
|
*.tss
|
||||||
|
|
||||||
|
# Telerik's JustMock configuration file
|
||||||
|
*.jmconfig
|
||||||
|
|
||||||
|
# BizTalk build output
|
||||||
|
*.btp.cs
|
||||||
|
*.btm.cs
|
||||||
|
*.odx.cs
|
||||||
|
*.xsd.cs
|
||||||
|
|
||||||
|
# OpenCover UI analysis results
|
||||||
|
OpenCover/
|
||||||
|
|
||||||
|
# Azure Stream Analytics local run output
|
||||||
|
ASALocalRun/
|
||||||
|
|
||||||
|
# MSBuild Binary and Structured Log
|
||||||
|
*.binlog
|
||||||
|
|
||||||
|
# NVidia Nsight GPU debugger configuration file
|
||||||
|
*.nvuser
|
||||||
|
|
||||||
|
# MFractors (Xamarin productivity tool) working folder
|
||||||
|
.mfractor/
|
||||||
|
|
||||||
|
# Local History for Visual Studio
|
||||||
|
.localhistory/
|
||||||
|
|
||||||
|
# BeatPulse healthcheck temp database
|
||||||
|
healthchecksdb
|
||||||
|
|
||||||
|
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||||
|
MigrationBackup/
|
||||||
|
|
||||||
|
# Ionide (cross platform F# VS Code tools) working folder
|
||||||
|
.ionide/
|
||||||
|
|
||||||
|
# Fody - auto-generated XML schema
|
||||||
|
FodyWeavers.xsd
|
||||||
29
Common.Library/BaseClasses/CommonBase.cs
Normal file
29
Common.Library/BaseClasses/CommonBase.cs
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
using System.ComponentModel;
|
||||||
|
|
||||||
|
namespace Common.Library;
|
||||||
|
|
||||||
|
public abstract class CommonBase : INotifyPropertyChanged
|
||||||
|
{
|
||||||
|
#region Constructor
|
||||||
|
protected CommonBase()
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Init Method
|
||||||
|
public virtual void Init()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
#region RaisePropertyChanged Method
|
||||||
|
public event PropertyChangedEventHandler? PropertyChanged;
|
||||||
|
public virtual void RaisePropertyChanged(string propertyName)
|
||||||
|
{
|
||||||
|
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
5
Common.Library/BaseClasses/EntityBase.cs
Normal file
5
Common.Library/BaseClasses/EntityBase.cs
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
namespace Common.Library;
|
||||||
|
|
||||||
|
public class EntityBase : CommonBase
|
||||||
|
{
|
||||||
|
}
|
||||||
14
Common.Library/BaseClasses/ViewModelBase.cs
Normal file
14
Common.Library/BaseClasses/ViewModelBase.cs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
//using GreadyPoang.DataLayer;
|
||||||
|
|
||||||
|
namespace Common.Library;
|
||||||
|
public class ViewModelBase : CommonBase
|
||||||
|
{
|
||||||
|
//private readonly LocalDbService _dbService;
|
||||||
|
|
||||||
|
//public ViewModelBase(LocalDbService dbService)
|
||||||
|
//{
|
||||||
|
// _dbService = dbService;
|
||||||
|
//}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
15
Common.Library/Common.Library.csproj
Normal file
15
Common.Library/Common.Library.csproj
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFrameworks>
|
||||||
|
net9.0-android;
|
||||||
|
net9.0-ios;
|
||||||
|
net9.0-maccatalyst;
|
||||||
|
net9.0-windows10.0.19041
|
||||||
|
</TargetFrameworks>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|
||||||
|
</Project>
|
||||||
9
Common.Library/Interfaces/IMethodSharingService.cs
Normal file
9
Common.Library/Interfaces/IMethodSharingService.cs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
using System.Collections.ObjectModel;
|
||||||
|
|
||||||
|
namespace Common.Library
|
||||||
|
{
|
||||||
|
public interface IMethodSharingService<TEntity>
|
||||||
|
{
|
||||||
|
ObservableCollection<TEntity> Get();
|
||||||
|
}
|
||||||
|
}
|
||||||
10
Common.Library/Interfaces/IRepository.cs
Normal file
10
Common.Library/Interfaces/IRepository.cs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
namespace Common.Library;
|
||||||
|
|
||||||
|
public interface IRepository<TEntity>
|
||||||
|
{
|
||||||
|
Task<IEnumerable<TEntity>> Get();
|
||||||
|
Task<TEntity?> Get(int id);
|
||||||
|
Task<int> Save(TEntity entity);
|
||||||
|
bool Delete(TEntity entity);
|
||||||
|
Task<bool> DeleteById(int Id);
|
||||||
|
}
|
||||||
0
Example.cs
Normal file
0
Example.cs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net9.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Common.Library\Common.Library.csproj" />
|
||||||
|
<ProjectReference Include="..\Gready_Poang.EntityLayer\Gready_Poang.EntityLayer.csproj" />
|
||||||
|
<ProjectReference Include="..\Gready_Poang.ViewModelLayer\Gready_Poang.ViewModelLayer.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
30
Gready_Poang.Common/Base/BehaviorBase.cs
Normal file
30
Gready_Poang.Common/Base/BehaviorBase.cs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
namespace GreadyPoang.Common;
|
||||||
|
|
||||||
|
public class BehaviorBase<T> : Behavior<T> where T : BindableObject
|
||||||
|
{
|
||||||
|
public T? AssociatedObject { get; private set; }
|
||||||
|
|
||||||
|
protected override void OnAttachedTo(T bindable)
|
||||||
|
{
|
||||||
|
base.OnAttachedTo(bindable);
|
||||||
|
AssociatedObject = bindable;
|
||||||
|
|
||||||
|
if (bindable.BindingContext != null)
|
||||||
|
BindingContext = bindable.BindingContext;
|
||||||
|
|
||||||
|
bindable.BindingContextChanged += OnBindingContextChanged;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnDetachingFrom(T bindable)
|
||||||
|
{
|
||||||
|
base.OnDetachingFrom(bindable);
|
||||||
|
bindable.BindingContextChanged -= OnBindingContextChanged;
|
||||||
|
AssociatedObject = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnBindingContextChanged(object? sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (AssociatedObject != null)
|
||||||
|
BindingContext = AssociatedObject.BindingContext;
|
||||||
|
}
|
||||||
|
}
|
||||||
19
Gready_Poang.Common/Gready_Poang.Common.csproj
Normal file
19
Gready_Poang.Common/Gready_Poang.Common.csproj
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFrameworks>
|
||||||
|
net9.0-android;
|
||||||
|
net9.0-ios;
|
||||||
|
net9.0-maccatalyst;
|
||||||
|
net9.0-windows10.0.19041
|
||||||
|
</TargetFrameworks>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.Maui.Controls" Version="9.0.100" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
||||||
|
</Project>
|
||||||
44
Gready_Poang.Common/Specifics/DigitsOnlyBehavior.cs
Normal file
44
Gready_Poang.Common/Specifics/DigitsOnlyBehavior.cs
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
namespace GreadyPoang.Common;
|
||||||
|
|
||||||
|
public class DigitsOnlyBehavior : Behavior<Entry?>
|
||||||
|
{
|
||||||
|
protected override void OnAttachedTo(Entry? entry)
|
||||||
|
{
|
||||||
|
if (entry != null)
|
||||||
|
{
|
||||||
|
entry.TextChanged += OnTextChanged;
|
||||||
|
}
|
||||||
|
base.OnAttachedTo(entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnDetachingFrom(Entry? entry)
|
||||||
|
{
|
||||||
|
if (entry != null)
|
||||||
|
{
|
||||||
|
entry.TextChanged -= OnTextChanged;
|
||||||
|
}
|
||||||
|
base.OnDetachingFrom(entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnTextChanged(object? sender, TextChangedEventArgs e)
|
||||||
|
{
|
||||||
|
var entry = sender as Entry;
|
||||||
|
if (entry == null) return;
|
||||||
|
|
||||||
|
// Tillåt endast siffror (0–9)
|
||||||
|
if (!Regex.IsMatch(e.NewTextValue, @"^\d*$"))
|
||||||
|
{
|
||||||
|
entry.Text = e.OldTextValue; // Återställ till tidigare giltigt värde
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Vill du tillåta decimaler? Ändra regex till @"^\d*\.?\d*$"
|
||||||
|
Vill du tillåta negativa tal? Använd @"^-?\d*$"
|
||||||
|
Vill du visa en varning när användaren skriver fel?
|
||||||
|
Lägg till en BindableProperty för IsValid och bind den till UI.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
59
Gready_Poang.Common/Specifics/EventToCommandBehavior.cs
Normal file
59
Gready_Poang.Common/Specifics/EventToCommandBehavior.cs
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
using System.Windows.Input;
|
||||||
|
|
||||||
|
namespace GreadyPoang.Common;
|
||||||
|
public class EventToCommandBehavior : BehaviorBase<VisualElement>
|
||||||
|
{
|
||||||
|
public required string EventName { get; set; }
|
||||||
|
|
||||||
|
public static readonly BindableProperty CommandProperty =
|
||||||
|
BindableProperty.Create(nameof(Command), typeof(ICommand), typeof(EventToCommandBehavior));
|
||||||
|
|
||||||
|
public ICommand Command
|
||||||
|
{
|
||||||
|
get => (ICommand)GetValue(CommandProperty);
|
||||||
|
set => SetValue(CommandProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fix for CS8618: Make the field nullable and fix IDE1006: Add '_' prefix
|
||||||
|
private EventInfo? _eventInfo;
|
||||||
|
private Delegate? _eventHandler;
|
||||||
|
|
||||||
|
protected override void OnAttachedTo(VisualElement bindable)
|
||||||
|
{
|
||||||
|
base.OnAttachedTo(bindable);
|
||||||
|
|
||||||
|
if (bindable == null || string.IsNullOrEmpty(EventName))
|
||||||
|
return;
|
||||||
|
|
||||||
|
var runtimeEvent = bindable.GetType().GetRuntimeEvent(EventName);
|
||||||
|
if (runtimeEvent == null)
|
||||||
|
throw new ArgumentException($"Event '{EventName}' not found on type '{bindable.GetType().Name}'");
|
||||||
|
|
||||||
|
_eventInfo = runtimeEvent;
|
||||||
|
|
||||||
|
MethodInfo? methodInfo = typeof(EventToCommandBehavior).GetTypeInfo().GetDeclaredMethod(nameof(OnEvent));
|
||||||
|
if (methodInfo == null)
|
||||||
|
throw new InvalidOperationException($"Method '{nameof(OnEvent)}' not found on type '{typeof(EventToCommandBehavior).Name}'");
|
||||||
|
|
||||||
|
if (_eventInfo.EventHandlerType == null)
|
||||||
|
throw new InvalidOperationException($"EventHandlerType for event '{EventName}' is null on type '{bindable.GetType().Name}'");
|
||||||
|
|
||||||
|
_eventHandler = methodInfo.CreateDelegate(_eventInfo.EventHandlerType, this);
|
||||||
|
_eventInfo.AddEventHandler(bindable, _eventHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnDetachingFrom(VisualElement bindable)
|
||||||
|
{
|
||||||
|
base.OnDetachingFrom(bindable);
|
||||||
|
|
||||||
|
if (_eventInfo != null && _eventHandler != null)
|
||||||
|
_eventInfo.RemoveEventHandler(bindable, _eventHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnEvent(object sender, object eventArgs)
|
||||||
|
{
|
||||||
|
if (Command?.CanExecute(eventArgs) == true)
|
||||||
|
Command.Execute(eventArgs);
|
||||||
|
}
|
||||||
|
}
|
||||||
148
Gready_Poang.DataLayer/DataClasses/CombinedRepository.cs
Normal file
148
Gready_Poang.DataLayer/DataClasses/CombinedRepository.cs
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
using GreadyPoang.DataLayer.Database;
|
||||||
|
using GreadyPoang.EntityLayer;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer;
|
||||||
|
|
||||||
|
public class CombinedRepository : ICombinedRepository
|
||||||
|
{
|
||||||
|
private readonly DataContext _context;
|
||||||
|
|
||||||
|
public CombinedRepository(DataContext context)
|
||||||
|
{
|
||||||
|
_context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public IEnumerable<RoundBuilderElement> roundBuilderElements()
|
||||||
|
{
|
||||||
|
var latestGamePoints = _context.GamePoints
|
||||||
|
.AsEnumerable()
|
||||||
|
.GroupBy(gp => new { gp.GameRoundId, gp.ParticipantId })
|
||||||
|
.Select(g => g.OrderByDescending(gp => gp.GamePointId).First())
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
var gamerounds = _context.GameRounds.AsEnumerable();
|
||||||
|
var participants = _context.Participants.AsEnumerable();
|
||||||
|
|
||||||
|
var result = (from gameRound in gamerounds
|
||||||
|
join gamePoint in latestGamePoints on gameRound.GameRoundId equals gamePoint.GameRoundId
|
||||||
|
join participant in participants on gamePoint.ParticipantId equals participant.ParticipantId
|
||||||
|
orderby gameRound.GameRoundStartDate descending, participant.LastName, participant.FirstName, gamePoint.GameRoundRegNr
|
||||||
|
select new RoundBuilderElement
|
||||||
|
{
|
||||||
|
ParticipantId = participant.ParticipantId,
|
||||||
|
ParticipantName = participant.LastNameFirstName,
|
||||||
|
GamePointId = gamePoint.GamePointId,
|
||||||
|
GameRoundRegNr = gamePoint.GameRoundRegNr,
|
||||||
|
GameRegPoints = gamePoint.GameRegPoints,
|
||||||
|
GameRoundId = gameRound.GameRoundId,
|
||||||
|
GameRoundStartDate = gameRound.GameRoundStartDate,
|
||||||
|
Status = gameRound.GameStatus
|
||||||
|
}).ToList();
|
||||||
|
return result;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<RoundBuilderElement> roundBuilderElementsDb()
|
||||||
|
{
|
||||||
|
var result = _context.RoundBuilderElements
|
||||||
|
.FromSqlRaw(@"
|
||||||
|
SELECT
|
||||||
|
gp.GamePointId,
|
||||||
|
gp.GameRoundId,
|
||||||
|
gp.GameRoundRegNr,
|
||||||
|
latest.totPoints as GameRegPoints,
|
||||||
|
gr.GameRoundStartDate,
|
||||||
|
gr.GameStatus AS Status,
|
||||||
|
p.ParticipantId,
|
||||||
|
(p.LastName || ' ' || p.FirstName) AS ParticipantName
|
||||||
|
FROM GamePoints gp
|
||||||
|
INNER JOIN (
|
||||||
|
SELECT ParticipantId, GameRoundId, MAX(GamePointId) AS MaxGamePointId , sum(GameRegPoints) AS totPoints
|
||||||
|
FROM GamePoints
|
||||||
|
GROUP BY ParticipantId, GameRoundId
|
||||||
|
) latest ON gp.GamePointId = latest.MaxGamePointId
|
||||||
|
INNER JOIN GameRounds gr ON gp.GameRoundId = gr.GameRoundId
|
||||||
|
INNER JOIN Participants p ON gp.ParticipantId = p.ParticipantId
|
||||||
|
ORDER BY gr.GameRoundStartDate DESC, p.LastName, p.FirstName, gp.GameRoundRegNr
|
||||||
|
")
|
||||||
|
.ToList();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<RoundBuilderElement> roundBuilderElementsDbById(int GameId)
|
||||||
|
{
|
||||||
|
var result = _context.RoundBuilderElements
|
||||||
|
.FromSql($@"
|
||||||
|
SELECT
|
||||||
|
gp.GamePointId,
|
||||||
|
gp.GameRoundId,
|
||||||
|
gp.GameRoundRegNr,
|
||||||
|
gp.GameRegPoints,
|
||||||
|
gr.GameRoundStartDate,
|
||||||
|
gr.GameStatus AS Status,
|
||||||
|
p.ParticipantId,
|
||||||
|
(p.LastName || ' ' || p.FirstName) AS ParticipantName
|
||||||
|
FROM GamePoints gp
|
||||||
|
INNER JOIN (
|
||||||
|
SELECT ParticipantId, GameRoundId, MAX(GamePointId) AS MaxGamePointId
|
||||||
|
FROM GamePoints
|
||||||
|
GROUP BY ParticipantId, GameRoundId
|
||||||
|
) latest ON gp.GamePointId = latest.MaxGamePointId
|
||||||
|
INNER JOIN GameRounds gr ON gp.GameRoundId = gr.GameRoundId
|
||||||
|
INNER JOIN Participants p ON gp.ParticipantId = p.ParticipantId
|
||||||
|
WHERE gp.GameRoundId = {GameId.ToString()}
|
||||||
|
ORDER BY gr.GameRoundStartDate DESC, p.LastName, p.FirstName, gp.GameRoundRegNr
|
||||||
|
")
|
||||||
|
.ToList();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<RoundBuilderElement> roundBuilderElementsTotal()
|
||||||
|
{
|
||||||
|
|
||||||
|
var result = (from gameRound in _context.GameRounds
|
||||||
|
join gamePoint in _context.GamePoints on gameRound.GameRoundId equals gamePoint.GameRoundId
|
||||||
|
join participant in _context.Participants on gamePoint.ParticipantId equals participant.ParticipantId
|
||||||
|
orderby gameRound.GameRoundStartDate descending, participant.LastName, participant.FirstName, gamePoint.GameRoundRegNr
|
||||||
|
select new RoundBuilderElement
|
||||||
|
{
|
||||||
|
ParticipantId = participant.ParticipantId,
|
||||||
|
ParticipantName = participant.LastNameFirstName,
|
||||||
|
GamePointId = gamePoint.GamePointId,
|
||||||
|
GameRoundRegNr = gamePoint.GameRoundRegNr,
|
||||||
|
GameRegPoints = gamePoint.GameRegPoints,
|
||||||
|
GameRoundId = gameRound.GameRoundId,
|
||||||
|
GameRoundStartDate = gameRound.GameRoundStartDate,
|
||||||
|
Status = gameRound.GameStatus
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<RoundBuilderElement> roundBuilderElementsTotalById(int roundId)
|
||||||
|
{
|
||||||
|
|
||||||
|
var result = (from gameRound in _context.GameRounds
|
||||||
|
join gamePoint in _context.GamePoints on gameRound.GameRoundId equals gamePoint.GameRoundId
|
||||||
|
join participant in _context.Participants on gamePoint.ParticipantId equals participant.ParticipantId
|
||||||
|
where gameRound.GameRoundId == roundId
|
||||||
|
orderby gameRound.GameRoundStartDate descending, participant.LastName, participant.FirstName, gamePoint.GameRoundRegNr
|
||||||
|
select new RoundBuilderElement
|
||||||
|
{
|
||||||
|
ParticipantId = participant.ParticipantId,
|
||||||
|
ParticipantName = participant.LastNameFirstName,
|
||||||
|
GamePointId = gamePoint.GamePointId,
|
||||||
|
GameRoundRegNr = gamePoint.GameRoundRegNr,
|
||||||
|
GameRegPoints = gamePoint.GameRegPoints,
|
||||||
|
GameRoundId = gameRound.GameRoundId,
|
||||||
|
GameRoundStartDate = gameRound.GameRoundStartDate,
|
||||||
|
Status = gameRound.GameStatus
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
83
Gready_Poang.DataLayer/DataClasses/GamePointRepository.cs
Normal file
83
Gready_Poang.DataLayer/DataClasses/GamePointRepository.cs
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
using Common.Library;
|
||||||
|
using GreadyPoang.DataLayer.Database;
|
||||||
|
using GreadyPoang.EntityLayer;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer;
|
||||||
|
|
||||||
|
public class GamePointRepository : IRepository<GamePoint>
|
||||||
|
{
|
||||||
|
private readonly DataContext _dataContext;
|
||||||
|
|
||||||
|
public GamePointRepository(DataContext dataContext)
|
||||||
|
{
|
||||||
|
_dataContext = dataContext;
|
||||||
|
}
|
||||||
|
public async Task<IEnumerable<GamePoint>> Get()
|
||||||
|
{
|
||||||
|
return await _dataContext.GamePoints.ToListAsync();
|
||||||
|
}
|
||||||
|
public async Task<GamePoint?> Get(int id)
|
||||||
|
{
|
||||||
|
return await _dataContext.GamePoints.FindAsync(id);
|
||||||
|
}
|
||||||
|
public async Task<int> Save(GamePoint entity)
|
||||||
|
{
|
||||||
|
var res = -1;
|
||||||
|
if ((entity.GameRoundRegNr == 0)
|
||||||
|
&& (entity.GameRegPoints == 0))
|
||||||
|
{
|
||||||
|
return res; // Validation failed
|
||||||
|
}
|
||||||
|
|
||||||
|
if (entity.GamePointId == 0)
|
||||||
|
{
|
||||||
|
_dataContext.GamePoints.Add(entity);
|
||||||
|
await _dataContext.SaveChangesAsync();
|
||||||
|
res = entity.GamePointId;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_dataContext.GamePoints.Update(entity);
|
||||||
|
await _dataContext.SaveChangesAsync();
|
||||||
|
res = entity.GamePointId;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Delete(GamePoint entity)
|
||||||
|
{
|
||||||
|
var res = false;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_dataContext.GamePoints.Remove(entity);
|
||||||
|
_dataContext.SaveChangesAsync();
|
||||||
|
res = true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
System.Diagnostics.Debug.WriteLine($"Error deleting participant: {ex.Message}");
|
||||||
|
res = false;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<bool> DeleteById(int Id)
|
||||||
|
{
|
||||||
|
var ok = false;
|
||||||
|
var delObject = await this.Get(Id);
|
||||||
|
if (delObject != null)
|
||||||
|
{
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ok = this.Delete(delObject);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
throw new Exception("Unsuccessful remove of GamePoint: " + ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
}
|
||||||
81
Gready_Poang.DataLayer/DataClasses/GameRoundRepository.cs
Normal file
81
Gready_Poang.DataLayer/DataClasses/GameRoundRepository.cs
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
using Common.Library;
|
||||||
|
using GreadyPoang.DataLayer.Database;
|
||||||
|
using GreadyPoang.EntityLayer;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer;
|
||||||
|
|
||||||
|
public class GameRoundRepository : IRepository<GameRound>
|
||||||
|
{
|
||||||
|
private readonly DataContext _dataContext;
|
||||||
|
|
||||||
|
public GameRoundRepository(DataContext dataContext)
|
||||||
|
{
|
||||||
|
_dataContext = dataContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Delete(GameRound entity)
|
||||||
|
{
|
||||||
|
var res = false;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_dataContext.GameRounds.Remove(entity);
|
||||||
|
_dataContext.SaveChanges();
|
||||||
|
res = true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
System.Diagnostics.Debug.WriteLine($"Error deleting GameRound: {ex.Message}");
|
||||||
|
res = false;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<IEnumerable<GameRound>> Get()
|
||||||
|
{
|
||||||
|
return await _dataContext.GameRounds.ToListAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<GameRound?> Get(int id)
|
||||||
|
{
|
||||||
|
return await _dataContext.GameRounds.FindAsync(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<int> Save(GameRound entity)
|
||||||
|
{
|
||||||
|
var res = -1;
|
||||||
|
if (entity.GameRoundId == 0)
|
||||||
|
{
|
||||||
|
_dataContext.GameRounds.Add(entity);
|
||||||
|
await _dataContext.SaveChangesAsync();
|
||||||
|
res = entity.GameRoundId;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_dataContext.GameRounds.Update(entity);
|
||||||
|
await _dataContext.SaveChangesAsync();
|
||||||
|
res = entity.GameRoundId;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<bool> DeleteById(int Id)
|
||||||
|
{
|
||||||
|
var ok = false;
|
||||||
|
var delObject = await this.Get(Id);
|
||||||
|
if (delObject != null)
|
||||||
|
{
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ok = this.Delete(delObject);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
throw new Exception("Unsuccessful remove of GameRound: " + ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
46
Gready_Poang.DataLayer/DataClasses/LocalDbService.cs
Normal file
46
Gready_Poang.DataLayer/DataClasses/LocalDbService.cs
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
using GreadyPoang.EntityLayer;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer;
|
||||||
|
|
||||||
|
public class LocalDbService
|
||||||
|
{
|
||||||
|
private const string DB_NAME = "PoangDB";
|
||||||
|
private readonly SQLiteAsyncConnection _connection;
|
||||||
|
|
||||||
|
public LocalDbService()
|
||||||
|
{
|
||||||
|
//string dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), DB_NAME);
|
||||||
|
string dbPath = Path.Combine(FileSystem.Current.AppDataDirectory, DB_NAME);
|
||||||
|
_connection = new SQLiteAsyncConnection(dbPath);
|
||||||
|
_connection.CreateTableAsync<Participant>().Wait();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<List<Participant>> GetParticipantsAsync()
|
||||||
|
{
|
||||||
|
return await _connection.Table<Participant>().ToListAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<Participant?> GetParticipantAsync(int id)
|
||||||
|
{
|
||||||
|
return await _connection.Table<Participant>().Where(p => p.ParticipantId == id).FirstOrDefaultAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<int> SaveParticipantAsync(Participant participant)
|
||||||
|
{
|
||||||
|
if (participant.ParticipantId != 0)
|
||||||
|
{
|
||||||
|
return await _connection.UpdateAsync(participant);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return await _connection.InsertAsync(participant);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<int> DeleteParticipantAsync(Participant participant)
|
||||||
|
{
|
||||||
|
return await _connection.DeleteAsync(participant);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
84
Gready_Poang.DataLayer/DataClasses/ParticipantRepository.cs
Normal file
84
Gready_Poang.DataLayer/DataClasses/ParticipantRepository.cs
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
using Common.Library;
|
||||||
|
using GreadyPoang.DataLayer.Database;
|
||||||
|
using GreadyPoang.EntityLayer;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer;
|
||||||
|
|
||||||
|
public class ParticipantRepository : IRepository<Participant>
|
||||||
|
{
|
||||||
|
private readonly DataContext _dataContext;
|
||||||
|
|
||||||
|
public ParticipantRepository(DataContext dataContext)
|
||||||
|
{
|
||||||
|
_dataContext = dataContext;
|
||||||
|
}
|
||||||
|
public async Task<IEnumerable<Participant>> Get()
|
||||||
|
{
|
||||||
|
return await _dataContext.Participants.ToListAsync();
|
||||||
|
}
|
||||||
|
public async Task<Participant?> Get(int id)
|
||||||
|
{
|
||||||
|
// Fix: Use FindAsync with key value array, not a predicate
|
||||||
|
return await _dataContext.Participants.FindAsync(id);
|
||||||
|
}
|
||||||
|
public async Task<int> Save(Participant entity)
|
||||||
|
{
|
||||||
|
var res = -1;
|
||||||
|
if (string.IsNullOrEmpty(entity.FirstName)
|
||||||
|
|| string.IsNullOrEmpty(entity.LastName))
|
||||||
|
{
|
||||||
|
return res; // Validation failed
|
||||||
|
}
|
||||||
|
|
||||||
|
if (entity.ParticipantId == 0)
|
||||||
|
{
|
||||||
|
_dataContext.Participants.Add(entity);
|
||||||
|
await _dataContext.SaveChangesAsync();
|
||||||
|
res = entity.ParticipantId;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_dataContext.Participants.Update(entity);
|
||||||
|
await _dataContext.SaveChangesAsync();
|
||||||
|
res = entity.ParticipantId;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
|
||||||
|
}
|
||||||
|
public bool Delete(Participant entity)
|
||||||
|
{
|
||||||
|
var res = false;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_dataContext.Participants.Remove(entity);
|
||||||
|
_dataContext.SaveChanges();
|
||||||
|
res = true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
System.Diagnostics.Debug.WriteLine($"Error deleting participant: {ex.Message}");
|
||||||
|
res = false;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<bool> DeleteById(int Id)
|
||||||
|
{
|
||||||
|
var ok = false;
|
||||||
|
var delObject = await this.Get(Id);
|
||||||
|
if (delObject != null)
|
||||||
|
{
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ok = this.Delete(delObject);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
throw new Exception("Unsuccessful remove of Participant: " + ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
}
|
||||||
41
Gready_Poang.DataLayer/Database/DataContext.cs
Normal file
41
Gready_Poang.DataLayer/Database/DataContext.cs
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
using GreadyPoang.EntityLayer;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer.Database;
|
||||||
|
|
||||||
|
public class DataContext : DbContext
|
||||||
|
{
|
||||||
|
public DataContext(DbContextOptions<DataContext> options) : base(options)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
//public DbSet<User> Users => Set<User>();
|
||||||
|
public DbSet<Participant> Participants { get; set; }
|
||||||
|
public DbSet<GamePoint> GamePoints { get; set; }
|
||||||
|
public DbSet<GameRound> GameRounds { get; set; }
|
||||||
|
|
||||||
|
public DbSet<RoundBuilderElement> RoundBuilderElements { get; set; }
|
||||||
|
|
||||||
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
base.OnModelCreating(modelBuilder);
|
||||||
|
modelBuilder.Entity<Participant>().HasData(
|
||||||
|
new Participant { ParticipantId = 1, FirstName = "John", LastName = "Doe", Email = "John.Doe@gmail.com" },
|
||||||
|
new Participant { ParticipantId = 2, FirstName = "Jane", LastName = "Black", Email = "jb@gmail.com" },
|
||||||
|
new Participant { ParticipantId = 3, FirstName = "Mary", LastName = "White", Email = "mw@gmail.com" }
|
||||||
|
);
|
||||||
|
modelBuilder.Entity<GameRound>().HasData(
|
||||||
|
new GameRound { GameRoundId = 1, GameRoundStartDate = new DateTime(2025, 10, 15, 19, 10, 15), GameRoundFinished = DateTime.MinValue, GameStatus = GamePointStatus.New },
|
||||||
|
new GameRound { GameRoundId = 2, GameRoundStartDate = new DateTime(2025, 09, 15, 19, 10, 15), GameRoundFinished = DateTime.MinValue, GameStatus = GamePointStatus.New },
|
||||||
|
new GameRound { GameRoundId = 3, GameRoundStartDate = new DateTime(2025, 09, 20, 19, 10, 15), GameRoundFinished = DateTime.MinValue, GameStatus = GamePointStatus.New }
|
||||||
|
);
|
||||||
|
modelBuilder.Entity<GamePoint>().HasData(
|
||||||
|
new GamePoint { GamePointId = 1, ParticipantId = 1, GameRoundId = 2, GameDate = new DateTime(2025, 10, 15, 20, 10, 15), GameRoundRegNr = 1, GameRegPoints = 1050 },
|
||||||
|
new GamePoint { GamePointId = 2, ParticipantId = 1, GameRoundId = 2, GameDate = new DateTime(2025, 10, 15, 20, 15, 15), GameRoundRegNr = 3, GameRegPoints = 350 },
|
||||||
|
new GamePoint { GamePointId = 3, ParticipantId = 3, GameRoundId = 2, GameDate = new DateTime(2025, 10, 15, 20, 12, 15), GameRoundRegNr = 2, GameRegPoints = 1000 },
|
||||||
|
new GamePoint { GamePointId = 4, ParticipantId = 3, GameRoundId = 2, GameDate = new DateTime(2025, 10, 15, 20, 20, 15), GameRoundRegNr = 4, GameRegPoints = 400 }
|
||||||
|
);
|
||||||
|
modelBuilder.Entity<RoundBuilderElement>().HasNoKey();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
34
Gready_Poang.DataLayer/Gready_Poang.DataLayer.csproj
Normal file
34
Gready_Poang.DataLayer/Gready_Poang.DataLayer.csproj
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFrameworks>
|
||||||
|
net9.0-android;
|
||||||
|
net9.0-ios;
|
||||||
|
net9.0-maccatalyst;
|
||||||
|
net9.0-windows10.0.19041
|
||||||
|
</TargetFrameworks>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Remove="DataClasses\LocalDbService.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.8">
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.8" />
|
||||||
|
<PackageReference Include="Microsoft.Maui.Controls" Version="9.0.100" />
|
||||||
|
<PackageReference Include="sqlite-net-pcl" Version="1.9.172" />
|
||||||
|
<PackageReference Include="SQLitePCLRaw.bundle_green" Version="2.1.11" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Common.Library\Common.Library.csproj" />
|
||||||
|
<ProjectReference Include="..\Gready_Poang.EntityLayer\Gready_Poang.EntityLayer.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
|
||||||
|
using GreadyPoang.EntityLayer;
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer;
|
||||||
|
|
||||||
|
public interface ICombinedRepository
|
||||||
|
{
|
||||||
|
IEnumerable<RoundBuilderElement> roundBuilderElements();
|
||||||
|
IEnumerable<RoundBuilderElement> roundBuilderElementsDb();
|
||||||
|
IEnumerable<RoundBuilderElement> roundBuilderElementsDbById(int GameId);
|
||||||
|
IEnumerable<RoundBuilderElement> roundBuilderElementsTotal();
|
||||||
|
IEnumerable<RoundBuilderElement> roundBuilderElementsTotalById(int roundId);
|
||||||
|
}
|
||||||
70
Gready_Poang.DataLayer/Migrations/20250901152226_initialCreate.Designer.cs
generated
Normal file
70
Gready_Poang.DataLayer/Migrations/20250901152226_initialCreate.Designer.cs
generated
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using GreadyPoang.DataLayer.Database;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(DataContext))]
|
||||||
|
[Migration("20250901152226_initialCreate")]
|
||||||
|
partial class initialCreate
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder.HasAnnotation("ProductVersion", "9.0.8");
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.Participant", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ParticipantId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("LastName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ParticipantId");
|
||||||
|
|
||||||
|
b.ToTable("Participants");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 1,
|
||||||
|
Email = "John.Doe@gmail.com",
|
||||||
|
FirstName = "John",
|
||||||
|
LastName = "Doe"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 2,
|
||||||
|
Email = "jb@gmail.com",
|
||||||
|
FirstName = "Jane",
|
||||||
|
LastName = "Black"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 3,
|
||||||
|
Email = "mw@gmail.com",
|
||||||
|
FirstName = "Mary",
|
||||||
|
LastName = "White"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,48 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class initialCreate : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Participants",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
ParticipantId = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
.Annotation("Sqlite:Autoincrement", true),
|
||||||
|
FirstName = table.Column<string>(type: "TEXT", nullable: false),
|
||||||
|
LastName = table.Column<string>(type: "TEXT", nullable: false),
|
||||||
|
Email = table.Column<string>(type: "TEXT", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Participants", x => x.ParticipantId);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.InsertData(
|
||||||
|
table: "Participants",
|
||||||
|
columns: new[] { "ParticipantId", "Email", "FirstName", "LastName" },
|
||||||
|
values: new object[,]
|
||||||
|
{
|
||||||
|
{ 1, "John.Doe@gmail.com", "John", "Doe" },
|
||||||
|
{ 2, "jb@gmail.com", "Jane", "Black" },
|
||||||
|
{ 3, "mw@gmail.com", "Mary", "White" }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Participants");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
135
Gready_Poang.DataLayer/Migrations/20250902115700_GamePointsTable.Designer.cs
generated
Normal file
135
Gready_Poang.DataLayer/Migrations/20250902115700_GamePointsTable.Designer.cs
generated
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using GreadyPoang.DataLayer.Database;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(DataContext))]
|
||||||
|
[Migration("20250902115700_GamePointsTable")]
|
||||||
|
partial class GamePointsTable
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder.HasAnnotation("ProductVersion", "9.0.8");
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.GamePoint", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("GamePointId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<DateTime>("GameDate")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("GameHeatId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("GameHeatRegNr")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("GameRegPoints")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("ParticipantId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("GamePointId");
|
||||||
|
|
||||||
|
b.ToTable("GamePoints");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 1,
|
||||||
|
GameDate = new DateTime(2025, 9, 2, 13, 56, 59, 539, DateTimeKind.Local).AddTicks(8341),
|
||||||
|
GameHeatId = 0,
|
||||||
|
GameHeatRegNr = 1,
|
||||||
|
GameRegPoints = 1050,
|
||||||
|
ParticipantId = 1
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 2,
|
||||||
|
GameDate = new DateTime(2025, 9, 2, 13, 56, 59, 539, DateTimeKind.Local).AddTicks(8923),
|
||||||
|
GameHeatId = 0,
|
||||||
|
GameHeatRegNr = 3,
|
||||||
|
GameRegPoints = 350,
|
||||||
|
ParticipantId = 1
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 3,
|
||||||
|
GameDate = new DateTime(2025, 9, 2, 13, 56, 59, 539, DateTimeKind.Local).AddTicks(8927),
|
||||||
|
GameHeatId = 0,
|
||||||
|
GameHeatRegNr = 2,
|
||||||
|
GameRegPoints = 1000,
|
||||||
|
ParticipantId = 3
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 4,
|
||||||
|
GameDate = new DateTime(2025, 9, 2, 13, 56, 59, 539, DateTimeKind.Local).AddTicks(8929),
|
||||||
|
GameHeatId = 0,
|
||||||
|
GameHeatRegNr = 4,
|
||||||
|
GameRegPoints = 400,
|
||||||
|
ParticipantId = 3
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.Participant", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ParticipantId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("LastName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ParticipantId");
|
||||||
|
|
||||||
|
b.ToTable("Participants");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 1,
|
||||||
|
Email = "John.Doe@gmail.com",
|
||||||
|
FirstName = "John",
|
||||||
|
LastName = "Doe"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 2,
|
||||||
|
Email = "jb@gmail.com",
|
||||||
|
FirstName = "Jane",
|
||||||
|
LastName = "Black"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 3,
|
||||||
|
Email = "mw@gmail.com",
|
||||||
|
FirstName = "Mary",
|
||||||
|
LastName = "White"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,52 @@
|
|||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class GamePointsTable : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "GamePoints",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
GamePointId = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
.Annotation("Sqlite:Autoincrement", true),
|
||||||
|
ParticipantId = table.Column<int>(type: "INTEGER", nullable: false),
|
||||||
|
GameHeatId = table.Column<int>(type: "INTEGER", nullable: false),
|
||||||
|
GameDate = table.Column<DateTime>(type: "TEXT", nullable: false),
|
||||||
|
GameHeatRegNr = table.Column<int>(type: "INTEGER", nullable: false),
|
||||||
|
GameRegPoints = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_GamePoints", x => x.GamePointId);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.InsertData(
|
||||||
|
table: "GamePoints",
|
||||||
|
columns: new[] { "GamePointId", "GameDate", "GameHeatId", "GameHeatRegNr", "GameRegPoints", "ParticipantId" },
|
||||||
|
values: new object[,]
|
||||||
|
{
|
||||||
|
{ 1, new DateTime(2025, 9, 2, 13, 56, 59, 539, DateTimeKind.Local).AddTicks(8341), 0, 1, 1050, 1 },
|
||||||
|
{ 2, new DateTime(2025, 9, 2, 13, 56, 59, 539, DateTimeKind.Local).AddTicks(8923), 0, 3, 350, 1 },
|
||||||
|
{ 3, new DateTime(2025, 9, 2, 13, 56, 59, 539, DateTimeKind.Local).AddTicks(8927), 0, 2, 1000, 3 },
|
||||||
|
{ 4, new DateTime(2025, 9, 2, 13, 56, 59, 539, DateTimeKind.Local).AddTicks(8929), 0, 4, 400, 3 }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "GamePoints");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
135
Gready_Poang.DataLayer/Migrations/20250902120934_GamePointsTableStaticSeed.Designer.cs
generated
Normal file
135
Gready_Poang.DataLayer/Migrations/20250902120934_GamePointsTableStaticSeed.Designer.cs
generated
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using GreadyPoang.DataLayer.Database;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(DataContext))]
|
||||||
|
[Migration("20250902120934_GamePointsTableStaticSeed")]
|
||||||
|
partial class GamePointsTableStaticSeed
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder.HasAnnotation("ProductVersion", "9.0.8");
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.GamePoint", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("GamePointId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<DateTime>("GameDate")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("GameHeatId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("GameHeatRegNr")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("GameRegPoints")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("ParticipantId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("GamePointId");
|
||||||
|
|
||||||
|
b.ToTable("GamePoints");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 1,
|
||||||
|
GameDate = new DateTime(2025, 9, 2, 14, 9, 34, 269, DateTimeKind.Local).AddTicks(5394),
|
||||||
|
GameHeatId = 0,
|
||||||
|
GameHeatRegNr = 1,
|
||||||
|
GameRegPoints = 1050,
|
||||||
|
ParticipantId = 1
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 2,
|
||||||
|
GameDate = new DateTime(2025, 9, 2, 14, 9, 34, 269, DateTimeKind.Local).AddTicks(6081),
|
||||||
|
GameHeatId = 0,
|
||||||
|
GameHeatRegNr = 3,
|
||||||
|
GameRegPoints = 350,
|
||||||
|
ParticipantId = 1
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 3,
|
||||||
|
GameDate = new DateTime(2025, 9, 2, 14, 9, 34, 269, DateTimeKind.Local).AddTicks(6085),
|
||||||
|
GameHeatId = 0,
|
||||||
|
GameHeatRegNr = 2,
|
||||||
|
GameRegPoints = 1000,
|
||||||
|
ParticipantId = 3
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 4,
|
||||||
|
GameDate = new DateTime(2025, 9, 2, 14, 9, 34, 269, DateTimeKind.Local).AddTicks(6088),
|
||||||
|
GameHeatId = 0,
|
||||||
|
GameHeatRegNr = 4,
|
||||||
|
GameRegPoints = 400,
|
||||||
|
ParticipantId = 3
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.Participant", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ParticipantId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("LastName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ParticipantId");
|
||||||
|
|
||||||
|
b.ToTable("Participants");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 1,
|
||||||
|
Email = "John.Doe@gmail.com",
|
||||||
|
FirstName = "John",
|
||||||
|
LastName = "Doe"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 2,
|
||||||
|
Email = "jb@gmail.com",
|
||||||
|
FirstName = "Jane",
|
||||||
|
LastName = "Black"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 3,
|
||||||
|
Email = "mw@gmail.com",
|
||||||
|
FirstName = "Mary",
|
||||||
|
LastName = "White"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class GamePointsTableStaticSeed : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 1,
|
||||||
|
column: "GameDate",
|
||||||
|
value: new DateTime(2025, 9, 2, 14, 9, 34, 269, DateTimeKind.Local).AddTicks(5394));
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 2,
|
||||||
|
column: "GameDate",
|
||||||
|
value: new DateTime(2025, 9, 2, 14, 9, 34, 269, DateTimeKind.Local).AddTicks(6081));
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 3,
|
||||||
|
column: "GameDate",
|
||||||
|
value: new DateTime(2025, 9, 2, 14, 9, 34, 269, DateTimeKind.Local).AddTicks(6085));
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 4,
|
||||||
|
column: "GameDate",
|
||||||
|
value: new DateTime(2025, 9, 2, 14, 9, 34, 269, DateTimeKind.Local).AddTicks(6088));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 1,
|
||||||
|
column: "GameDate",
|
||||||
|
value: new DateTime(2025, 9, 2, 13, 56, 59, 539, DateTimeKind.Local).AddTicks(8341));
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 2,
|
||||||
|
column: "GameDate",
|
||||||
|
value: new DateTime(2025, 9, 2, 13, 56, 59, 539, DateTimeKind.Local).AddTicks(8923));
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 3,
|
||||||
|
column: "GameDate",
|
||||||
|
value: new DateTime(2025, 9, 2, 13, 56, 59, 539, DateTimeKind.Local).AddTicks(8927));
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 4,
|
||||||
|
column: "GameDate",
|
||||||
|
value: new DateTime(2025, 9, 2, 13, 56, 59, 539, DateTimeKind.Local).AddTicks(8929));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
135
Gready_Poang.DataLayer/Migrations/20250902122130_FixDateTimeSeed.Designer.cs
generated
Normal file
135
Gready_Poang.DataLayer/Migrations/20250902122130_FixDateTimeSeed.Designer.cs
generated
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using GreadyPoang.DataLayer.Database;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(DataContext))]
|
||||||
|
[Migration("20250902122130_FixDateTimeSeed")]
|
||||||
|
partial class FixDateTimeSeed
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder.HasAnnotation("ProductVersion", "9.0.8");
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.GamePoint", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("GamePointId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<DateTime>("GameDate")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("GameHeatId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("GameHeatRegNr")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("GameRegPoints")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("ParticipantId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("GamePointId");
|
||||||
|
|
||||||
|
b.ToTable("GamePoints");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 1,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 10, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameHeatId = 0,
|
||||||
|
GameHeatRegNr = 1,
|
||||||
|
GameRegPoints = 1050,
|
||||||
|
ParticipantId = 1
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 2,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 15, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameHeatId = 0,
|
||||||
|
GameHeatRegNr = 3,
|
||||||
|
GameRegPoints = 350,
|
||||||
|
ParticipantId = 1
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 3,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 12, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameHeatId = 0,
|
||||||
|
GameHeatRegNr = 2,
|
||||||
|
GameRegPoints = 1000,
|
||||||
|
ParticipantId = 3
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 4,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 20, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameHeatId = 0,
|
||||||
|
GameHeatRegNr = 4,
|
||||||
|
GameRegPoints = 400,
|
||||||
|
ParticipantId = 3
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.Participant", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ParticipantId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("LastName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ParticipantId");
|
||||||
|
|
||||||
|
b.ToTable("Participants");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 1,
|
||||||
|
Email = "John.Doe@gmail.com",
|
||||||
|
FirstName = "John",
|
||||||
|
LastName = "Doe"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 2,
|
||||||
|
Email = "jb@gmail.com",
|
||||||
|
FirstName = "Jane",
|
||||||
|
LastName = "Black"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 3,
|
||||||
|
Email = "mw@gmail.com",
|
||||||
|
FirstName = "Mary",
|
||||||
|
LastName = "White"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class FixDateTimeSeed : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 1,
|
||||||
|
column: "GameDate",
|
||||||
|
value: new DateTime(2025, 10, 15, 20, 10, 15, 0, DateTimeKind.Unspecified));
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 2,
|
||||||
|
column: "GameDate",
|
||||||
|
value: new DateTime(2025, 10, 15, 20, 15, 15, 0, DateTimeKind.Unspecified));
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 3,
|
||||||
|
column: "GameDate",
|
||||||
|
value: new DateTime(2025, 10, 15, 20, 12, 15, 0, DateTimeKind.Unspecified));
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 4,
|
||||||
|
column: "GameDate",
|
||||||
|
value: new DateTime(2025, 10, 15, 20, 20, 15, 0, DateTimeKind.Unspecified));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 1,
|
||||||
|
column: "GameDate",
|
||||||
|
value: new DateTime(2025, 9, 2, 14, 9, 34, 269, DateTimeKind.Local).AddTicks(5394));
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 2,
|
||||||
|
column: "GameDate",
|
||||||
|
value: new DateTime(2025, 9, 2, 14, 9, 34, 269, DateTimeKind.Local).AddTicks(6081));
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 3,
|
||||||
|
column: "GameDate",
|
||||||
|
value: new DateTime(2025, 9, 2, 14, 9, 34, 269, DateTimeKind.Local).AddTicks(6085));
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 4,
|
||||||
|
column: "GameDate",
|
||||||
|
value: new DateTime(2025, 9, 2, 14, 9, 34, 269, DateTimeKind.Local).AddTicks(6088));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
135
Gready_Poang.DataLayer/Migrations/20250903062957_FixHeatToRoundParameter.Designer.cs
generated
Normal file
135
Gready_Poang.DataLayer/Migrations/20250903062957_FixHeatToRoundParameter.Designer.cs
generated
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using GreadyPoang.DataLayer.Database;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(DataContext))]
|
||||||
|
[Migration("20250903062957_FixHeatToRoundParameter")]
|
||||||
|
partial class FixHeatToRoundParameter
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder.HasAnnotation("ProductVersion", "9.0.8");
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.GamePoint", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("GamePointId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<DateTime>("GameDate")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("GameHeatId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("GameHeatRegNr")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("GameRegPoints")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("ParticipantId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("GamePointId");
|
||||||
|
|
||||||
|
b.ToTable("GamePoints");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 1,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 10, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameHeatId = 0,
|
||||||
|
GameHeatRegNr = 1,
|
||||||
|
GameRegPoints = 1050,
|
||||||
|
ParticipantId = 1
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 2,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 15, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameHeatId = 0,
|
||||||
|
GameHeatRegNr = 3,
|
||||||
|
GameRegPoints = 350,
|
||||||
|
ParticipantId = 1
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 3,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 12, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameHeatId = 0,
|
||||||
|
GameHeatRegNr = 2,
|
||||||
|
GameRegPoints = 1000,
|
||||||
|
ParticipantId = 3
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 4,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 20, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameHeatId = 0,
|
||||||
|
GameHeatRegNr = 4,
|
||||||
|
GameRegPoints = 400,
|
||||||
|
ParticipantId = 3
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.Participant", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ParticipantId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("LastName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ParticipantId");
|
||||||
|
|
||||||
|
b.ToTable("Participants");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 1,
|
||||||
|
Email = "John.Doe@gmail.com",
|
||||||
|
FirstName = "John",
|
||||||
|
LastName = "Doe"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 2,
|
||||||
|
Email = "jb@gmail.com",
|
||||||
|
FirstName = "Jane",
|
||||||
|
LastName = "Black"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 3,
|
||||||
|
Email = "mw@gmail.com",
|
||||||
|
FirstName = "Mary",
|
||||||
|
LastName = "White"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class FixHeatToRoundParameter : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
135
Gready_Poang.DataLayer/Migrations/20250903070200_FixHeatToRoundParams.Designer.cs
generated
Normal file
135
Gready_Poang.DataLayer/Migrations/20250903070200_FixHeatToRoundParams.Designer.cs
generated
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using GreadyPoang.DataLayer.Database;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(DataContext))]
|
||||||
|
[Migration("20250903070200_FixHeatToRoundParams")]
|
||||||
|
partial class FixHeatToRoundParams
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder.HasAnnotation("ProductVersion", "9.0.8");
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.GamePoint", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("GamePointId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<DateTime>("GameDate")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("GameRegPoints")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("GameRoundId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("GameRoundRegNr")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("ParticipantId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("GamePointId");
|
||||||
|
|
||||||
|
b.ToTable("GamePoints");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 1,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 10, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 1050,
|
||||||
|
GameRoundId = 0,
|
||||||
|
GameRoundRegNr = 1,
|
||||||
|
ParticipantId = 1
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 2,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 15, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 350,
|
||||||
|
GameRoundId = 0,
|
||||||
|
GameRoundRegNr = 3,
|
||||||
|
ParticipantId = 1
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 3,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 12, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 1000,
|
||||||
|
GameRoundId = 0,
|
||||||
|
GameRoundRegNr = 2,
|
||||||
|
ParticipantId = 3
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 4,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 20, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 400,
|
||||||
|
GameRoundId = 0,
|
||||||
|
GameRoundRegNr = 4,
|
||||||
|
ParticipantId = 3
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.Participant", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ParticipantId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("LastName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ParticipantId");
|
||||||
|
|
||||||
|
b.ToTable("Participants");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 1,
|
||||||
|
Email = "John.Doe@gmail.com",
|
||||||
|
FirstName = "John",
|
||||||
|
LastName = "Doe"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 2,
|
||||||
|
Email = "jb@gmail.com",
|
||||||
|
FirstName = "Jane",
|
||||||
|
LastName = "Black"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 3,
|
||||||
|
Email = "mw@gmail.com",
|
||||||
|
FirstName = "Mary",
|
||||||
|
LastName = "White"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class FixHeatToRoundParams : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.RenameColumn(
|
||||||
|
name: "GameHeatRegNr",
|
||||||
|
table: "GamePoints",
|
||||||
|
newName: "GameRoundRegNr");
|
||||||
|
|
||||||
|
migrationBuilder.RenameColumn(
|
||||||
|
name: "GameHeatId",
|
||||||
|
table: "GamePoints",
|
||||||
|
newName: "GameRoundId");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.RenameColumn(
|
||||||
|
name: "GameRoundRegNr",
|
||||||
|
table: "GamePoints",
|
||||||
|
newName: "GameHeatRegNr");
|
||||||
|
|
||||||
|
migrationBuilder.RenameColumn(
|
||||||
|
name: "GameRoundId",
|
||||||
|
table: "GamePoints",
|
||||||
|
newName: "GameHeatId");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
135
Gready_Poang.DataLayer/Migrations/20250903074537_AddedStatusEnum.Designer.cs
generated
Normal file
135
Gready_Poang.DataLayer/Migrations/20250903074537_AddedStatusEnum.Designer.cs
generated
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using GreadyPoang.DataLayer.Database;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(DataContext))]
|
||||||
|
[Migration("20250903074537_AddedStatusEnum")]
|
||||||
|
partial class AddedStatusEnum
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder.HasAnnotation("ProductVersion", "9.0.8");
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.GamePoint", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("GamePointId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<DateTime>("GameDate")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("GameRegPoints")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("GameRoundId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("GameRoundRegNr")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("ParticipantId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("GamePointId");
|
||||||
|
|
||||||
|
b.ToTable("GamePoints");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 1,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 10, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 1050,
|
||||||
|
GameRoundId = 0,
|
||||||
|
GameRoundRegNr = 1,
|
||||||
|
ParticipantId = 1
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 2,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 15, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 350,
|
||||||
|
GameRoundId = 0,
|
||||||
|
GameRoundRegNr = 3,
|
||||||
|
ParticipantId = 1
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 3,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 12, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 1000,
|
||||||
|
GameRoundId = 0,
|
||||||
|
GameRoundRegNr = 2,
|
||||||
|
ParticipantId = 3
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 4,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 20, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 400,
|
||||||
|
GameRoundId = 0,
|
||||||
|
GameRoundRegNr = 4,
|
||||||
|
ParticipantId = 3
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.Participant", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ParticipantId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("LastName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ParticipantId");
|
||||||
|
|
||||||
|
b.ToTable("Participants");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 1,
|
||||||
|
Email = "John.Doe@gmail.com",
|
||||||
|
FirstName = "John",
|
||||||
|
LastName = "Doe"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 2,
|
||||||
|
Email = "jb@gmail.com",
|
||||||
|
FirstName = "Jane",
|
||||||
|
LastName = "Black"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 3,
|
||||||
|
Email = "mw@gmail.com",
|
||||||
|
FirstName = "Mary",
|
||||||
|
LastName = "White"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class AddedStatusEnum : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
179
Gready_Poang.DataLayer/Migrations/20250903195147_AddedTableGameRounds.Designer.cs
generated
Normal file
179
Gready_Poang.DataLayer/Migrations/20250903195147_AddedTableGameRounds.Designer.cs
generated
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using GreadyPoang.DataLayer.Database;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(DataContext))]
|
||||||
|
[Migration("20250903195147_AddedTableGameRounds")]
|
||||||
|
partial class AddedTableGameRounds
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder.HasAnnotation("ProductVersion", "9.0.8");
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.GamePoint", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("GamePointId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<DateTime>("GameDate")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("GameRegPoints")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("GameRoundId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("GameRoundRegNr")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("ParticipantId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("PointStatus")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("GamePointId");
|
||||||
|
|
||||||
|
b.ToTable("GamePoints");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 1,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 10, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 1050,
|
||||||
|
GameRoundId = 2,
|
||||||
|
GameRoundRegNr = 1,
|
||||||
|
ParticipantId = 1,
|
||||||
|
PointStatus = 0
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 2,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 15, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 350,
|
||||||
|
GameRoundId = 2,
|
||||||
|
GameRoundRegNr = 3,
|
||||||
|
ParticipantId = 1,
|
||||||
|
PointStatus = 0
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 3,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 12, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 1000,
|
||||||
|
GameRoundId = 2,
|
||||||
|
GameRoundRegNr = 2,
|
||||||
|
ParticipantId = 3,
|
||||||
|
PointStatus = 0
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 4,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 20, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 400,
|
||||||
|
GameRoundId = 2,
|
||||||
|
GameRoundRegNr = 4,
|
||||||
|
ParticipantId = 3,
|
||||||
|
PointStatus = 0
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.GameRound", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("GameRoundId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<DateTime?>("GameRoundFinished")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<DateTime>("GameRoundStartDate")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("GameRoundId");
|
||||||
|
|
||||||
|
b.ToTable("GameRounds");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GameRoundId = 1,
|
||||||
|
GameRoundFinished = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRoundStartDate = new DateTime(2025, 10, 15, 19, 10, 15, 0, DateTimeKind.Unspecified)
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GameRoundId = 2,
|
||||||
|
GameRoundFinished = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRoundStartDate = new DateTime(2025, 9, 15, 19, 10, 15, 0, DateTimeKind.Unspecified)
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GameRoundId = 3,
|
||||||
|
GameRoundFinished = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRoundStartDate = new DateTime(2025, 9, 20, 19, 10, 15, 0, DateTimeKind.Unspecified)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.Participant", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ParticipantId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("LastName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ParticipantId");
|
||||||
|
|
||||||
|
b.ToTable("Participants");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 1,
|
||||||
|
Email = "John.Doe@gmail.com",
|
||||||
|
FirstName = "John",
|
||||||
|
LastName = "Doe"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 2,
|
||||||
|
Email = "jb@gmail.com",
|
||||||
|
FirstName = "Jane",
|
||||||
|
LastName = "Black"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 3,
|
||||||
|
Email = "mw@gmail.com",
|
||||||
|
FirstName = "Mary",
|
||||||
|
LastName = "White"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,115 @@
|
|||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class AddedTableGameRounds : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.AddColumn<int>(
|
||||||
|
name: "PointStatus",
|
||||||
|
table: "GamePoints",
|
||||||
|
type: "INTEGER",
|
||||||
|
nullable: false,
|
||||||
|
defaultValue: 0);
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "GameRounds",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
GameRoundId = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
.Annotation("Sqlite:Autoincrement", true),
|
||||||
|
GameRoundFinished = table.Column<DateTime>(type: "TEXT", nullable: true),
|
||||||
|
GameRoundStartDate = table.Column<DateTime>(type: "TEXT", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_GameRounds", x => x.GameRoundId);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 1,
|
||||||
|
columns: new[] { "GameRoundId", "PointStatus" },
|
||||||
|
values: new object[] { 2, 0 });
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 2,
|
||||||
|
columns: new[] { "GameRoundId", "PointStatus" },
|
||||||
|
values: new object[] { 2, 0 });
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 3,
|
||||||
|
columns: new[] { "GameRoundId", "PointStatus" },
|
||||||
|
values: new object[] { 2, 0 });
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 4,
|
||||||
|
columns: new[] { "GameRoundId", "PointStatus" },
|
||||||
|
values: new object[] { 2, 0 });
|
||||||
|
|
||||||
|
migrationBuilder.InsertData(
|
||||||
|
table: "GameRounds",
|
||||||
|
columns: new[] { "GameRoundId", "GameRoundFinished", "GameRoundStartDate" },
|
||||||
|
values: new object[,]
|
||||||
|
{
|
||||||
|
{ 1, new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new DateTime(2025, 10, 15, 19, 10, 15, 0, DateTimeKind.Unspecified) },
|
||||||
|
{ 2, new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new DateTime(2025, 9, 15, 19, 10, 15, 0, DateTimeKind.Unspecified) },
|
||||||
|
{ 3, new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new DateTime(2025, 9, 20, 19, 10, 15, 0, DateTimeKind.Unspecified) }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "GameRounds");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "PointStatus",
|
||||||
|
table: "GamePoints");
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 1,
|
||||||
|
column: "GameRoundId",
|
||||||
|
value: 0);
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 2,
|
||||||
|
column: "GameRoundId",
|
||||||
|
value: 0);
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 3,
|
||||||
|
column: "GameRoundId",
|
||||||
|
value: 0);
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 4,
|
||||||
|
column: "GameRoundId",
|
||||||
|
value: 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
179
Gready_Poang.DataLayer/Migrations/20250903195935_ChangedUpdateOrderInSeeding.Designer.cs
generated
Normal file
179
Gready_Poang.DataLayer/Migrations/20250903195935_ChangedUpdateOrderInSeeding.Designer.cs
generated
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using GreadyPoang.DataLayer.Database;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(DataContext))]
|
||||||
|
[Migration("20250903195935_ChangedUpdateOrderInSeeding")]
|
||||||
|
partial class ChangedUpdateOrderInSeeding
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder.HasAnnotation("ProductVersion", "9.0.8");
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.GamePoint", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("GamePointId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<DateTime>("GameDate")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("GameRegPoints")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("GameRoundId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("GameRoundRegNr")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("ParticipantId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("PointStatus")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("GamePointId");
|
||||||
|
|
||||||
|
b.ToTable("GamePoints");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 1,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 10, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 1050,
|
||||||
|
GameRoundId = 2,
|
||||||
|
GameRoundRegNr = 1,
|
||||||
|
ParticipantId = 1,
|
||||||
|
PointStatus = 0
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 2,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 15, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 350,
|
||||||
|
GameRoundId = 2,
|
||||||
|
GameRoundRegNr = 3,
|
||||||
|
ParticipantId = 1,
|
||||||
|
PointStatus = 0
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 3,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 12, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 1000,
|
||||||
|
GameRoundId = 2,
|
||||||
|
GameRoundRegNr = 2,
|
||||||
|
ParticipantId = 3,
|
||||||
|
PointStatus = 0
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 4,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 20, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 400,
|
||||||
|
GameRoundId = 2,
|
||||||
|
GameRoundRegNr = 4,
|
||||||
|
ParticipantId = 3,
|
||||||
|
PointStatus = 0
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.GameRound", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("GameRoundId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<DateTime?>("GameRoundFinished")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<DateTime>("GameRoundStartDate")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("GameRoundId");
|
||||||
|
|
||||||
|
b.ToTable("GameRounds");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GameRoundId = 1,
|
||||||
|
GameRoundFinished = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRoundStartDate = new DateTime(2025, 10, 15, 19, 10, 15, 0, DateTimeKind.Unspecified)
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GameRoundId = 2,
|
||||||
|
GameRoundFinished = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRoundStartDate = new DateTime(2025, 9, 15, 19, 10, 15, 0, DateTimeKind.Unspecified)
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GameRoundId = 3,
|
||||||
|
GameRoundFinished = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRoundStartDate = new DateTime(2025, 9, 20, 19, 10, 15, 0, DateTimeKind.Unspecified)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.Participant", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ParticipantId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("LastName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ParticipantId");
|
||||||
|
|
||||||
|
b.ToTable("Participants");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 1,
|
||||||
|
Email = "John.Doe@gmail.com",
|
||||||
|
FirstName = "John",
|
||||||
|
LastName = "Doe"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 2,
|
||||||
|
Email = "jb@gmail.com",
|
||||||
|
FirstName = "Jane",
|
||||||
|
LastName = "Black"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 3,
|
||||||
|
Email = "mw@gmail.com",
|
||||||
|
FirstName = "Mary",
|
||||||
|
LastName = "White"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class ChangedUpdateOrderInSeeding : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
178
Gready_Poang.DataLayer/Migrations/20250914064850_statusfieldmove.Designer.cs
generated
Normal file
178
Gready_Poang.DataLayer/Migrations/20250914064850_statusfieldmove.Designer.cs
generated
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using GreadyPoang.DataLayer.Database;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(DataContext))]
|
||||||
|
[Migration("20250914064850_statusfieldmove")]
|
||||||
|
partial class statusfieldmove
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder.HasAnnotation("ProductVersion", "9.0.8");
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.GamePoint", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("GamePointId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<DateTime>("GameDate")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("GameRegPoints")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("GameRoundId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("GameRoundRegNr")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("ParticipantId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("GamePointId");
|
||||||
|
|
||||||
|
b.ToTable("GamePoints");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 1,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 10, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 1050,
|
||||||
|
GameRoundId = 2,
|
||||||
|
GameRoundRegNr = 1,
|
||||||
|
ParticipantId = 1
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 2,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 15, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 350,
|
||||||
|
GameRoundId = 2,
|
||||||
|
GameRoundRegNr = 3,
|
||||||
|
ParticipantId = 1
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 3,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 12, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 1000,
|
||||||
|
GameRoundId = 2,
|
||||||
|
GameRoundRegNr = 2,
|
||||||
|
ParticipantId = 3
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 4,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 20, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 400,
|
||||||
|
GameRoundId = 2,
|
||||||
|
GameRoundRegNr = 4,
|
||||||
|
ParticipantId = 3
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.GameRound", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("GameRoundId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<DateTime?>("GameRoundFinished")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<DateTime>("GameRoundStartDate")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("GameStatus")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("GameRoundId");
|
||||||
|
|
||||||
|
b.ToTable("GameRounds");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GameRoundId = 1,
|
||||||
|
GameRoundFinished = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRoundStartDate = new DateTime(2025, 10, 15, 19, 10, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameStatus = 0
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GameRoundId = 2,
|
||||||
|
GameRoundFinished = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRoundStartDate = new DateTime(2025, 9, 15, 19, 10, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameStatus = 0
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GameRoundId = 3,
|
||||||
|
GameRoundFinished = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRoundStartDate = new DateTime(2025, 9, 20, 19, 10, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameStatus = 0
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.Participant", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ParticipantId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("LastName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ParticipantId");
|
||||||
|
|
||||||
|
b.ToTable("Participants");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 1,
|
||||||
|
Email = "John.Doe@gmail.com",
|
||||||
|
FirstName = "John",
|
||||||
|
LastName = "Doe"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 2,
|
||||||
|
Email = "jb@gmail.com",
|
||||||
|
FirstName = "Jane",
|
||||||
|
LastName = "Black"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 3,
|
||||||
|
Email = "mw@gmail.com",
|
||||||
|
FirstName = "Mary",
|
||||||
|
LastName = "White"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,89 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class statusfieldmove : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "PointStatus",
|
||||||
|
table: "GamePoints");
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<int>(
|
||||||
|
name: "GameStatus",
|
||||||
|
table: "GameRounds",
|
||||||
|
type: "INTEGER",
|
||||||
|
nullable: false,
|
||||||
|
defaultValue: 0);
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GameRounds",
|
||||||
|
keyColumn: "GameRoundId",
|
||||||
|
keyValue: 1,
|
||||||
|
column: "GameStatus",
|
||||||
|
value: 0);
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GameRounds",
|
||||||
|
keyColumn: "GameRoundId",
|
||||||
|
keyValue: 2,
|
||||||
|
column: "GameStatus",
|
||||||
|
value: 0);
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GameRounds",
|
||||||
|
keyColumn: "GameRoundId",
|
||||||
|
keyValue: 3,
|
||||||
|
column: "GameStatus",
|
||||||
|
value: 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "GameStatus",
|
||||||
|
table: "GameRounds");
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<int>(
|
||||||
|
name: "PointStatus",
|
||||||
|
table: "GamePoints",
|
||||||
|
type: "INTEGER",
|
||||||
|
nullable: false,
|
||||||
|
defaultValue: 0);
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 1,
|
||||||
|
column: "PointStatus",
|
||||||
|
value: 0);
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 2,
|
||||||
|
column: "PointStatus",
|
||||||
|
value: 0);
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 3,
|
||||||
|
column: "PointStatus",
|
||||||
|
value: 0);
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "GamePoints",
|
||||||
|
keyColumn: "GamePointId",
|
||||||
|
keyValue: 4,
|
||||||
|
column: "PointStatus",
|
||||||
|
value: 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
175
Gready_Poang.DataLayer/Migrations/DataContextModelSnapshot.cs
Normal file
175
Gready_Poang.DataLayer/Migrations/DataContextModelSnapshot.cs
Normal file
@ -0,0 +1,175 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using GreadyPoang.DataLayer.Database;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace GreadyPoang.DataLayer.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(DataContext))]
|
||||||
|
partial class DataContextModelSnapshot : ModelSnapshot
|
||||||
|
{
|
||||||
|
protected override void BuildModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder.HasAnnotation("ProductVersion", "9.0.8");
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.GamePoint", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("GamePointId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<DateTime>("GameDate")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("GameRegPoints")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("GameRoundId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("GameRoundRegNr")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<int>("ParticipantId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("GamePointId");
|
||||||
|
|
||||||
|
b.ToTable("GamePoints");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 1,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 10, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 1050,
|
||||||
|
GameRoundId = 2,
|
||||||
|
GameRoundRegNr = 1,
|
||||||
|
ParticipantId = 1
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 2,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 15, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 350,
|
||||||
|
GameRoundId = 2,
|
||||||
|
GameRoundRegNr = 3,
|
||||||
|
ParticipantId = 1
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 3,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 12, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 1000,
|
||||||
|
GameRoundId = 2,
|
||||||
|
GameRoundRegNr = 2,
|
||||||
|
ParticipantId = 3
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GamePointId = 4,
|
||||||
|
GameDate = new DateTime(2025, 10, 15, 20, 20, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRegPoints = 400,
|
||||||
|
GameRoundId = 2,
|
||||||
|
GameRoundRegNr = 4,
|
||||||
|
ParticipantId = 3
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.GameRound", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("GameRoundId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<DateTime?>("GameRoundFinished")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<DateTime>("GameRoundStartDate")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("GameStatus")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("GameRoundId");
|
||||||
|
|
||||||
|
b.ToTable("GameRounds");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GameRoundId = 1,
|
||||||
|
GameRoundFinished = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRoundStartDate = new DateTime(2025, 10, 15, 19, 10, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameStatus = 0
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GameRoundId = 2,
|
||||||
|
GameRoundFinished = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRoundStartDate = new DateTime(2025, 9, 15, 19, 10, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameStatus = 0
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
GameRoundId = 3,
|
||||||
|
GameRoundFinished = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
|
||||||
|
GameRoundStartDate = new DateTime(2025, 9, 20, 19, 10, 15, 0, DateTimeKind.Unspecified),
|
||||||
|
GameStatus = 0
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("GreadyPoang.EntityLayer.Participant", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("ParticipantId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("LastName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("ParticipantId");
|
||||||
|
|
||||||
|
b.ToTable("Participants");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 1,
|
||||||
|
Email = "John.Doe@gmail.com",
|
||||||
|
FirstName = "John",
|
||||||
|
LastName = "Doe"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 2,
|
||||||
|
Email = "jb@gmail.com",
|
||||||
|
FirstName = "Jane",
|
||||||
|
LastName = "Black"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
ParticipantId = 3,
|
||||||
|
Email = "mw@gmail.com",
|
||||||
|
FirstName = "Mary",
|
||||||
|
LastName = "White"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
97
Gready_Poang.EntityLayer/EntityClasses/GamePoint.cs
Normal file
97
Gready_Poang.EntityLayer/EntityClasses/GamePoint.cs
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
using Common.Library;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace GreadyPoang.EntityLayer;
|
||||||
|
[Table("GamePoint")]
|
||||||
|
public class GamePoint : EntityBase
|
||||||
|
{
|
||||||
|
public GamePoint()
|
||||||
|
{
|
||||||
|
_gamePointId = 0;
|
||||||
|
_participantId = 0;
|
||||||
|
_gameRoundId = 0;
|
||||||
|
_gameDate = DateTime.Now;
|
||||||
|
_gameRoundRegNr = 0;
|
||||||
|
_gameRegPoints = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int _gamePointId;
|
||||||
|
private int _participantId;
|
||||||
|
private int _gameRoundId;
|
||||||
|
private DateTime _gameDate;
|
||||||
|
private int _gameRoundRegNr;
|
||||||
|
private int _gameRegPoints;
|
||||||
|
|
||||||
|
[PrimaryKey]
|
||||||
|
[AutoIncrement]
|
||||||
|
[Column("GamePointId")]
|
||||||
|
public int GamePointId
|
||||||
|
{
|
||||||
|
get { return _gamePointId; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_gamePointId = value;
|
||||||
|
RaisePropertyChanged(nameof(GamePointId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("ParticipantId")]
|
||||||
|
public int ParticipantId
|
||||||
|
{
|
||||||
|
get { return _participantId; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_participantId = value;
|
||||||
|
RaisePropertyChanged(nameof(ParticipantId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[Column("GameRoundId")]
|
||||||
|
public int GameRoundId
|
||||||
|
{
|
||||||
|
get { return _gameRoundId; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_gameRoundId = value;
|
||||||
|
RaisePropertyChanged(nameof(GameRoundId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("GameDate")]
|
||||||
|
public DateTime GameDate
|
||||||
|
{
|
||||||
|
get { return _gameDate; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_gameDate = value;
|
||||||
|
RaisePropertyChanged(nameof(GameDate));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GameRoundRegNr räknas upp när en spelare får en ny gamepoint inlagd
|
||||||
|
// Alltså hans/hennes senaste i samma runda uppräknad med 1
|
||||||
|
|
||||||
|
[Column("GameRoundRegNr")]
|
||||||
|
public int GameRoundRegNr
|
||||||
|
{
|
||||||
|
get { return _gameRoundRegNr; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_gameRoundRegNr = value;
|
||||||
|
RaisePropertyChanged(nameof(GameRoundRegNr));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("GameRegPoints")]
|
||||||
|
public int GameRegPoints
|
||||||
|
{
|
||||||
|
get { return _gameRegPoints; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_gameRegPoints = value;
|
||||||
|
RaisePropertyChanged(nameof(GameRegPoints));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
77
Gready_Poang.EntityLayer/EntityClasses/GameRound.cs
Normal file
77
Gready_Poang.EntityLayer/EntityClasses/GameRound.cs
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
using Common.Library;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace GreadyPoang.EntityLayer;
|
||||||
|
|
||||||
|
|
||||||
|
[Table("GameRound")]
|
||||||
|
|
||||||
|
public class GameRound : EntityBase
|
||||||
|
{
|
||||||
|
public GameRound()
|
||||||
|
{
|
||||||
|
_gameRoundId = 0;
|
||||||
|
_gameRoundStartDate = DateTime.Now;
|
||||||
|
_gameStatus = GamePointStatus.New;
|
||||||
|
_gameRoundFinished = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int _gameRoundId;
|
||||||
|
private DateTime _gameRoundStartDate;
|
||||||
|
private GamePointStatus _gameStatus;
|
||||||
|
private DateTime? _gameRoundFinished;
|
||||||
|
|
||||||
|
[Column("GameRoundFinished")]
|
||||||
|
public DateTime? GameRoundFinished
|
||||||
|
{
|
||||||
|
get { return _gameRoundFinished; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_gameRoundFinished = value;
|
||||||
|
RaisePropertyChanged(nameof(GameRoundFinished));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("GameRoundStartDate")]
|
||||||
|
public DateTime GameRoundStartDate
|
||||||
|
{
|
||||||
|
get { return _gameRoundStartDate; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_gameRoundStartDate = value;
|
||||||
|
RaisePropertyChanged(nameof(GameRoundStartDate));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("GameStatus")]
|
||||||
|
public GamePointStatus GameStatus
|
||||||
|
{
|
||||||
|
get { return _gameStatus; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_gameStatus = value;
|
||||||
|
RaisePropertyChanged(nameof(GameStatus));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[PrimaryKey]
|
||||||
|
[AutoIncrement]
|
||||||
|
[Column("GameRoundId")]
|
||||||
|
public int GameRoundId
|
||||||
|
{
|
||||||
|
get { return _gameRoundId; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_gameRoundId = value;
|
||||||
|
RaisePropertyChanged(nameof(GameRoundId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GameRoundStartDateString
|
||||||
|
{
|
||||||
|
get { return _gameRoundStartDate.ToString("yyyy-MM-dd"); }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
75
Gready_Poang.EntityLayer/EntityClasses/Participant.cs
Normal file
75
Gready_Poang.EntityLayer/EntityClasses/Participant.cs
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
using Common.Library;
|
||||||
|
using SQLite;
|
||||||
|
|
||||||
|
namespace GreadyPoang.EntityLayer;
|
||||||
|
[Table("Participants")]
|
||||||
|
public class Participant : EntityBase
|
||||||
|
{
|
||||||
|
public Participant()
|
||||||
|
{
|
||||||
|
_firstName = string.Empty;
|
||||||
|
_lastName = string.Empty;
|
||||||
|
_email = string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int _participantId;
|
||||||
|
private string _firstName;
|
||||||
|
private string _lastName;
|
||||||
|
private string _email;
|
||||||
|
|
||||||
|
[PrimaryKey]
|
||||||
|
[AutoIncrement]
|
||||||
|
[Column("ParticipantId")]
|
||||||
|
public int ParticipantId
|
||||||
|
{
|
||||||
|
get { return _participantId; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_participantId = value;
|
||||||
|
RaisePropertyChanged(nameof(ParticipantId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("FirstName")]
|
||||||
|
public string FirstName
|
||||||
|
{
|
||||||
|
get { return _firstName; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_firstName = value;
|
||||||
|
RaisePropertyChanged(nameof(FirstName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("LastName")]
|
||||||
|
public string LastName
|
||||||
|
{
|
||||||
|
get { return _lastName; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_lastName = value;
|
||||||
|
RaisePropertyChanged(nameof(LastName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("Email")]
|
||||||
|
public string Email
|
||||||
|
{
|
||||||
|
get { return _email; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_email = value;
|
||||||
|
RaisePropertyChanged(nameof(Email));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string FullName
|
||||||
|
{
|
||||||
|
get { return $"{FirstName} {LastName}"; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public string LastNameFirstName
|
||||||
|
{
|
||||||
|
get { return $"{LastName}, {FirstName}"; }
|
||||||
|
}
|
||||||
|
}
|
||||||
11
Gready_Poang.EntityLayer/Enums/GamePointStatus.cs
Normal file
11
Gready_Poang.EntityLayer/Enums/GamePointStatus.cs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
namespace GreadyPoang.EntityLayer;
|
||||||
|
|
||||||
|
public enum GamePointStatus
|
||||||
|
{
|
||||||
|
New = 0,
|
||||||
|
InProgress = 1,
|
||||||
|
Completed = 2,
|
||||||
|
Cancelled = 3,
|
||||||
|
Winning = 4,
|
||||||
|
Winner = 5
|
||||||
|
}
|
||||||
22
Gready_Poang.EntityLayer/Gready_Poang.EntityLayer.csproj
Normal file
22
Gready_Poang.EntityLayer/Gready_Poang.EntityLayer.csproj
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFrameworks>
|
||||||
|
net9.0-android;
|
||||||
|
net9.0-ios;
|
||||||
|
net9.0-maccatalyst;
|
||||||
|
net9.0-windows10.0.19041
|
||||||
|
</TargetFrameworks>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Common.Library\Common.Library.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="sqlite-net-pcl" Version="1.9.172" />
|
||||||
|
<PackageReference Include="SQLitePCLRaw.bundle_green" Version="2.1.11" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
55
Gready_Poang.EntityLayer/HelperEntities/PlayerColumn.cs
Normal file
55
Gready_Poang.EntityLayer/HelperEntities/PlayerColumn.cs
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
using Common.Library;
|
||||||
|
|
||||||
|
namespace GreadyPoang.EntityLayer;
|
||||||
|
|
||||||
|
public class PlayerColumn : EntityBase
|
||||||
|
{
|
||||||
|
public PlayerColumn()
|
||||||
|
{
|
||||||
|
_playerName = string.Empty;
|
||||||
|
_values = new List<string>();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private int _playerId;
|
||||||
|
private string _playerName;
|
||||||
|
private List<string> _values;
|
||||||
|
public string PlayerName
|
||||||
|
{
|
||||||
|
get { return _playerName; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_playerName = value;
|
||||||
|
RaisePropertyChanged(nameof(PlayerName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public List<string> Values
|
||||||
|
{
|
||||||
|
get { return _values; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_values = value;
|
||||||
|
RaisePropertyChanged(nameof(Values));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int PlayerId
|
||||||
|
{
|
||||||
|
get { return _playerId; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_playerId = value;
|
||||||
|
RaisePropertyChanged(nameof(PlayerId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int _playerPoints;
|
||||||
|
|
||||||
|
public int PlayerPoints
|
||||||
|
{
|
||||||
|
get { return _playerPoints; }
|
||||||
|
set { _playerPoints = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
126
Gready_Poang.EntityLayer/HelperEntities/RoundBuilderElement.cs
Normal file
126
Gready_Poang.EntityLayer/HelperEntities/RoundBuilderElement.cs
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
using Common.Library;
|
||||||
|
|
||||||
|
namespace GreadyPoang.EntityLayer;
|
||||||
|
|
||||||
|
public class RoundBuilderElement : EntityBase
|
||||||
|
{
|
||||||
|
public RoundBuilderElement()
|
||||||
|
{
|
||||||
|
_participantId = 0;
|
||||||
|
_participantName = string.Empty;
|
||||||
|
_gameRoundRegNr = 0;
|
||||||
|
_gameRegPoints = 0;
|
||||||
|
_status = GamePointStatus.New;
|
||||||
|
_gameRoundStartDate = DateTime.MinValue;
|
||||||
|
_gameRoundId = 0;
|
||||||
|
_gamePointId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int _participantId;
|
||||||
|
private string _participantName;
|
||||||
|
private int _gameRoundRegNr;
|
||||||
|
private int _gameRegPoints;
|
||||||
|
private GamePointStatus _status;
|
||||||
|
private DateTime _gameRoundStartDate;
|
||||||
|
private int _gameRoundId;
|
||||||
|
private int _gamePointId;
|
||||||
|
|
||||||
|
public int ParticipantId
|
||||||
|
{
|
||||||
|
get { return _participantId; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_participantId = value;
|
||||||
|
RaisePropertyChanged(nameof(ParticipantId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public string ParticipantName
|
||||||
|
{
|
||||||
|
get { return _participantName; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_participantName = value;
|
||||||
|
RaisePropertyChanged(nameof(ParticipantName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int GameRoundRegNr
|
||||||
|
{
|
||||||
|
get { return _gameRoundRegNr; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_gameRoundRegNr = value;
|
||||||
|
RaisePropertyChanged(nameof(GameRoundRegNr));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int GameRegPoints
|
||||||
|
{
|
||||||
|
get { return _gameRegPoints; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_gameRegPoints = value;
|
||||||
|
RaisePropertyChanged(nameof(GameRegPoints));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public GamePointStatus Status
|
||||||
|
{
|
||||||
|
get { return _status; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_status = value;
|
||||||
|
RaisePropertyChanged(nameof(Status));
|
||||||
|
RaisePropertyChanged(nameof(StatusString));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string StatusString
|
||||||
|
{
|
||||||
|
get { return _status.ToString(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public DateTime GameRoundStartDate
|
||||||
|
{
|
||||||
|
get { return _gameRoundStartDate; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_gameRoundStartDate = value;
|
||||||
|
RaisePropertyChanged(nameof(GameRoundStartDate));
|
||||||
|
RaisePropertyChanged(nameof(GameRoundStartDateString));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GameRoundStartDateString
|
||||||
|
{
|
||||||
|
get { return _gameRoundStartDate.ToString("yyyy-MM-dd"); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public int GameRoundId
|
||||||
|
{
|
||||||
|
get { return _gameRoundId; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_gameRoundId = value;
|
||||||
|
RaisePropertyChanged(nameof(GameRoundId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int GamePointId
|
||||||
|
{
|
||||||
|
get { return _gamePointId; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_gamePointId = value;
|
||||||
|
RaisePropertyChanged(nameof(GamePointId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
56
Gready_Poang.EntityLayer/HelperEntities/RoundBuilderGroup.cs
Normal file
56
Gready_Poang.EntityLayer/HelperEntities/RoundBuilderGroup.cs
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
using Common.Library;
|
||||||
|
|
||||||
|
namespace GreadyPoang.EntityLayer;
|
||||||
|
|
||||||
|
public class RoundBuilderGroup : EntityBase
|
||||||
|
{
|
||||||
|
public RoundBuilderGroup()
|
||||||
|
{
|
||||||
|
_gameRoundId = 0;
|
||||||
|
_gameRoundStartDate = DateTime.MinValue;
|
||||||
|
_status = GamePointStatus.New;
|
||||||
|
_elements = new List<RoundBuilderElement>();
|
||||||
|
}
|
||||||
|
private int _gameRoundId;
|
||||||
|
private DateTime _gameRoundStartDate;
|
||||||
|
private GamePointStatus _status;
|
||||||
|
private List<RoundBuilderElement> _elements;
|
||||||
|
public int GameRoundId
|
||||||
|
{
|
||||||
|
get { return _gameRoundId; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_gameRoundId = value;
|
||||||
|
// No need to raise property changed for this example
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public DateTime GameRoundStartDate
|
||||||
|
{
|
||||||
|
get { return _gameRoundStartDate; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_gameRoundStartDate = value;
|
||||||
|
// No need to raise property changed for this example
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public GamePointStatus Status
|
||||||
|
{
|
||||||
|
get { return _status; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_status = value;
|
||||||
|
// No need to raise property changed for this example
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<RoundBuilderElement> Elements
|
||||||
|
{
|
||||||
|
get { return _elements; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_elements = value;
|
||||||
|
RaisePropertyChanged(nameof(Elements));
|
||||||
|
// No need to raise property changed for this example
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
29
Gready_Poang.Migrations/Gready_Poang.Migrations.csproj
Normal file
29
Gready_Poang.Migrations/Gready_Poang.Migrations.csproj
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFrameworks>
|
||||||
|
net9.0-android;
|
||||||
|
net9.0-ios;
|
||||||
|
net9.0-maccatalyst;
|
||||||
|
net9.0-windows10.0.19041
|
||||||
|
</TargetFrameworks>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.8">
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.8" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.8" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.8" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Gready_Poang.DataLayer\Gready_Poang.DataLayer.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
33
Gready_Poang.Migrations/Program.cs
Normal file
33
Gready_Poang.Migrations/Program.cs
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
using GreadyPoang.DataLayer.Database;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.Extensions.Hosting; // Replace with your actual namespace
|
||||||
|
|
||||||
|
class Program
|
||||||
|
{
|
||||||
|
static void Main(string[] args)
|
||||||
|
{
|
||||||
|
using var host = CreateHostBuilder(args).Build();
|
||||||
|
|
||||||
|
// Resolve your DbContext
|
||||||
|
var context = host.Services.GetRequiredService<DataContext>();
|
||||||
|
context.Database.EnsureCreated();
|
||||||
|
// Optional: Apply migrations at runtime
|
||||||
|
context.Database.Migrate();
|
||||||
|
|
||||||
|
Console.WriteLine("Migration applied successfully.");
|
||||||
|
}
|
||||||
|
|
||||||
|
static IHostBuilder CreateHostBuilder(string[] args) =>
|
||||||
|
Host.CreateDefaultBuilder(args)
|
||||||
|
.ConfigureServices((_, services) =>
|
||||||
|
{
|
||||||
|
var MauiDataPath = string.Empty;
|
||||||
|
MauiDataPath = File.ReadAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MauiDataPath_GreadyPoang.txt"));
|
||||||
|
var dbPath = Path.Combine(MauiDataPath, "PoangDB.db");
|
||||||
|
services.AddDbContext<DataContext>(options =>
|
||||||
|
options.UseSqlite($"Data Source={dbPath}"));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// dotnet ef migrations add FixHeatToRoundParams --project GreadyPoang.DataLayer --startup-project GreadyPoang.Migrations
|
||||||
|
// dotnet ef database update --project GreadyPoang.DataLayer --startup-project GreadyPoang.Migrations
|
||||||
18
Gready_Poang.Services/Gready_Poang.Services.csproj
Normal file
18
Gready_Poang.Services/Gready_Poang.Services.csproj
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFrameworks>
|
||||||
|
net9.0-android;
|
||||||
|
net9.0-ios;
|
||||||
|
net9.0-maccatalyst;
|
||||||
|
net9.0-windows10.0.19041
|
||||||
|
</TargetFrameworks>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Gready_Poang.EntityLayer\Gready_Poang.EntityLayer.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
using GreadyPoang.EntityLayer;
|
||||||
|
|
||||||
|
namespace GreadyPoang.Services;
|
||||||
|
|
||||||
|
public class ObjectMessageService : IObjectMessageService
|
||||||
|
{
|
||||||
|
public required RoundBuilderGroup CurrentGroup { get; set; }
|
||||||
|
public bool Delivered { get; set; } = false;
|
||||||
|
}
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
using GreadyPoang.EntityLayer;
|
||||||
|
|
||||||
|
namespace GreadyPoang.Services
|
||||||
|
{
|
||||||
|
public interface IObjectMessageService
|
||||||
|
{
|
||||||
|
RoundBuilderGroup CurrentGroup { get; set; }
|
||||||
|
bool Delivered { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFrameworks>
|
||||||
|
net9.0-android;
|
||||||
|
net9.0-ios;
|
||||||
|
net9.0-maccatalyst;
|
||||||
|
net9.0-windows10.0.19041
|
||||||
|
</TargetFrameworks>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Common.Library\Common.Library.csproj" />
|
||||||
|
<ProjectReference Include="..\Gready_Poang.DataLayer\Gready_Poang.DataLayer.csproj" />
|
||||||
|
<ProjectReference Include="..\Gready_Poang.EntityLayer\Gready_Poang.EntityLayer.csproj" />
|
||||||
|
<ProjectReference Include="..\Gready_Poang.Services\Gready_Poang.Services.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
namespace GreadyPoang.Core;
|
||||||
|
|
||||||
|
public interface INavigationService
|
||||||
|
{
|
||||||
|
Task NavigateToAsync(string route);
|
||||||
|
Task NavigateToPageAsync(Page page);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
6
Gready_Poang.ViewModelLayer/Interfaces/IPageFactory.cs
Normal file
6
Gready_Poang.ViewModelLayer/Interfaces/IPageFactory.cs
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
namespace GreadyPoang.Core;
|
||||||
|
|
||||||
|
public interface IPageFactory
|
||||||
|
{
|
||||||
|
Page CreateRoundPage();
|
||||||
|
}
|
||||||
9
Gready_Poang.ViewModelLayer/Interfaces/ISplashService.cs
Normal file
9
Gready_Poang.ViewModelLayer/Interfaces/ISplashService.cs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
namespace GreadyPoang.Core;
|
||||||
|
|
||||||
|
public interface ISplashService
|
||||||
|
{
|
||||||
|
Task ShowSplash(string text = "Välkommen!", int durationMs = 3000);
|
||||||
|
Task HideAsync();
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
using Common.Library;
|
||||||
|
|
||||||
|
namespace GreadyPoang.ViewModelLayer;
|
||||||
|
|
||||||
|
public class AppShellViewModel : ViewModelBase
|
||||||
|
{
|
||||||
|
|
||||||
|
private bool _roundRounningVisible = true;
|
||||||
|
|
||||||
|
public bool RoundRunningVisible
|
||||||
|
{
|
||||||
|
get { return _roundRounningVisible; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_roundRounningVisible = value;
|
||||||
|
RaisePropertyChanged(nameof(RoundRunningVisible));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
using Common.Library;
|
||||||
|
using GreadyPoang.Services;
|
||||||
|
|
||||||
|
namespace GreadyPoang.ViewModelLayer;
|
||||||
|
|
||||||
|
public class MainPageViewModel : ViewModelBase
|
||||||
|
{
|
||||||
|
private readonly AppShellViewModel _appShell;
|
||||||
|
private readonly IObjectMessageService _messageService;
|
||||||
|
|
||||||
|
public MainPageViewModel(
|
||||||
|
AppShellViewModel appShell,
|
||||||
|
IObjectMessageService messageService
|
||||||
|
) : base()
|
||||||
|
{
|
||||||
|
|
||||||
|
_appShell = appShell;
|
||||||
|
_messageService = messageService;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void InitMessage()
|
||||||
|
{
|
||||||
|
if (_appShell.RoundRunningVisible == false)
|
||||||
|
{
|
||||||
|
_messageService.Delivered = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
using Common.Library;
|
||||||
|
using GreadyPoang.EntityLayer;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
|
||||||
|
namespace GreadyPoang.ViewModelLayer;
|
||||||
|
|
||||||
|
public class MethodSharingService : ViewModelBase, IMethodSharingService<Participant>
|
||||||
|
{
|
||||||
|
private readonly IRepository<Participant> _repository;
|
||||||
|
|
||||||
|
public MethodSharingService(IRepository<Participant> repository)
|
||||||
|
{
|
||||||
|
_repository = repository;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public ObservableCollection<Participant> Get()
|
||||||
|
{
|
||||||
|
ObservableCollection<Participant> _participantList = new();
|
||||||
|
|
||||||
|
if (_repository != null)
|
||||||
|
{
|
||||||
|
var participantsTask = _repository.Get();
|
||||||
|
var participants = participantsTask is Task<IEnumerable<Participant>> task
|
||||||
|
? task.GetAwaiter().GetResult()
|
||||||
|
: (IEnumerable<Participant>)participantsTask;
|
||||||
|
foreach (var participant in participants)
|
||||||
|
{
|
||||||
|
if (!_participantList.Any(p => p.ParticipantId == participant.ParticipantId))
|
||||||
|
{
|
||||||
|
_participantList.Add(participant);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _participantList;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,109 @@
|
|||||||
|
using Common.Library;
|
||||||
|
using GreadyPoang.EntityLayer;
|
||||||
|
using GreadyPoang.Services;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
|
||||||
|
|
||||||
|
namespace GreadyPoang.ViewModelLayer;
|
||||||
|
|
||||||
|
public class ParticipantViewModel : ViewModelBase
|
||||||
|
{
|
||||||
|
#region Constructors
|
||||||
|
public ParticipantViewModel() : base()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public ParticipantViewModel(
|
||||||
|
IRepository<Participant> repo,
|
||||||
|
IMethodSharingService<Participant> sharingService,
|
||||||
|
AppShellViewModel appShell,
|
||||||
|
IObjectMessageService objectMessage) : base()
|
||||||
|
{
|
||||||
|
_Repository = repo;
|
||||||
|
_sharingService = sharingService;
|
||||||
|
_appShell = appShell;
|
||||||
|
_objectMessage = objectMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Private Variables
|
||||||
|
private Participant? _ParticipantObject = new();
|
||||||
|
private ObservableCollection<Participant> _ParticipantList = new();
|
||||||
|
private readonly IRepository<Participant>? _Repository;
|
||||||
|
private readonly IMethodSharingService<Participant> _sharingService;
|
||||||
|
private readonly AppShellViewModel _appShell;
|
||||||
|
private readonly IObjectMessageService _objectMessage;
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region public Properties
|
||||||
|
|
||||||
|
public Participant? ParticipantObject
|
||||||
|
{
|
||||||
|
get { return _ParticipantObject; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_ParticipantObject = value;
|
||||||
|
RaisePropertyChanged(nameof(ParticipantObject));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ObservableCollection<Participant> ParticipantList
|
||||||
|
{
|
||||||
|
get { return _ParticipantList; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_ParticipantList = value;
|
||||||
|
RaisePropertyChanged(nameof(ParticipantList));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Get Method
|
||||||
|
public ObservableCollection<Participant> Get()
|
||||||
|
{
|
||||||
|
if (_appShell.RoundRunningVisible == false)
|
||||||
|
{
|
||||||
|
_objectMessage.Delivered = true;
|
||||||
|
}
|
||||||
|
ParticipantList = _sharingService.Get();
|
||||||
|
return ParticipantList;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Get(id) Method
|
||||||
|
public Participant? Get(int id)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ParticipantObject = _Repository?.Get(id).GetAwaiter().GetResult();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
System.Diagnostics.Debug.WriteLine($"Error in Get method: {ex.Message}");
|
||||||
|
}
|
||||||
|
|
||||||
|
return ParticipantObject;
|
||||||
|
}
|
||||||
|
public virtual bool Save()
|
||||||
|
{
|
||||||
|
if (_Repository == null || ParticipantObject == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var tmpTask = _Repository.Save(ParticipantObject);
|
||||||
|
int tmp = tmpTask.GetAwaiter().GetResult();
|
||||||
|
if (tmp != -1)
|
||||||
|
{
|
||||||
|
ParticipantObject = new Participant();
|
||||||
|
this.Get();
|
||||||
|
}
|
||||||
|
return tmp != -1;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
@ -0,0 +1,309 @@
|
|||||||
|
using Common.Library;
|
||||||
|
using GreadyPoang.Core;
|
||||||
|
using GreadyPoang.DataLayer;
|
||||||
|
using GreadyPoang.EntityLayer;
|
||||||
|
using GreadyPoang.Services;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
|
namespace GreadyPoang.ViewModelLayer;
|
||||||
|
|
||||||
|
public class RoundRunningViewModel : ViewModelBase
|
||||||
|
{
|
||||||
|
|
||||||
|
public event EventHandler RebuildRequested;
|
||||||
|
|
||||||
|
public RoundRunningViewModel() : base()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public RoundRunningViewModel(
|
||||||
|
|
||||||
|
IRepository<GameRound> roundsRepo,
|
||||||
|
IRepository<GamePoint> pointsRepo,
|
||||||
|
IMethodSharingService<Participant> sharingService,
|
||||||
|
ICombinedRepository combined,
|
||||||
|
IObjectMessageService objectMessage,
|
||||||
|
ISplashService splashService,
|
||||||
|
AppShellViewModel appShell
|
||||||
|
) : base()
|
||||||
|
{
|
||||||
|
_roundsRepo = roundsRepo;
|
||||||
|
_pointsRepo = pointsRepo;
|
||||||
|
_sharingService = sharingService;
|
||||||
|
_combined = combined;
|
||||||
|
_objectMessage = objectMessage;
|
||||||
|
_splashService = splashService;
|
||||||
|
_appShell = appShell;
|
||||||
|
_roundElements = new ObservableCollection<RoundBuilderElement>();
|
||||||
|
_builderObject = new();
|
||||||
|
_SplashShowing = false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool _SplashShowing;
|
||||||
|
|
||||||
|
private readonly IRepository<GameRound>? _roundsRepo;
|
||||||
|
private readonly IRepository<GamePoint> _pointsRepo;
|
||||||
|
private readonly IMethodSharingService<Participant> _sharingService;
|
||||||
|
private readonly ICombinedRepository _combined;
|
||||||
|
private readonly IObjectMessageService _objectMessage;
|
||||||
|
private readonly ISplashService _splashService;
|
||||||
|
private readonly AppShellViewModel _appShell;
|
||||||
|
private ObservableCollection<RoundBuilderGroup> _GameRoundList = new();
|
||||||
|
private ObservableCollection<Participant> _ParticipantList = new();
|
||||||
|
private ObservableCollection<RoundBuilderElement> _roundElements;
|
||||||
|
private Collection<PlayerColumn> _playerColumns;
|
||||||
|
private RoundBuilderElement _builderObject;
|
||||||
|
|
||||||
|
public void TriggerRebuild()
|
||||||
|
{
|
||||||
|
// Trigga eventet
|
||||||
|
RebuildRequested?.Invoke(this, EventArgs.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Översta raden
|
||||||
|
public ObservableCollection<RoundBuilderElement> RoundElements
|
||||||
|
{
|
||||||
|
get { return _roundElements; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_roundElements = value;
|
||||||
|
RaisePropertyChanged(nameof(RoundElements));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Nedersta strukturen
|
||||||
|
public Collection<PlayerColumn> PlayerColumns
|
||||||
|
{
|
||||||
|
get { return _playerColumns; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_playerColumns = value;
|
||||||
|
RaisePropertyChanged(nameof(PlayerColumns));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public RoundBuilderElement BuilderObject
|
||||||
|
{
|
||||||
|
get { return _builderObject; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_builderObject = value;
|
||||||
|
RaisePropertyChanged(nameof(BuilderObject));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool _gobackVisible = true;
|
||||||
|
|
||||||
|
public bool GobackVisible
|
||||||
|
{
|
||||||
|
get { return _gobackVisible; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_gobackVisible = value;
|
||||||
|
RaisePropertyChanged(nameof(GobackVisible));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public ObservableCollection<RoundBuilderElement> Get()
|
||||||
|
{
|
||||||
|
|
||||||
|
//_overlay.ShowSplash("Laddar...", 30);
|
||||||
|
|
||||||
|
if (_objectMessage.CurrentGroup != null)
|
||||||
|
{
|
||||||
|
GobackVisible = _objectMessage.Delivered;
|
||||||
|
_objectMessage.Delivered = false;
|
||||||
|
//CurrentGroup är satt från RoundStarting ViewModel
|
||||||
|
Debug.WriteLine($"Chosen round: {_objectMessage.CurrentGroup.GameRoundId}");
|
||||||
|
if (RoundElements.Count > 0)
|
||||||
|
{
|
||||||
|
RoundElements.Clear();
|
||||||
|
}
|
||||||
|
foreach (var item in _objectMessage.CurrentGroup.Elements)
|
||||||
|
{
|
||||||
|
RoundElements.Add(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Räkna ut vem som är nästa spelare
|
||||||
|
var nxt = nextPlayerElement();
|
||||||
|
|
||||||
|
// Aktuell spelare sätts som BuilderObject
|
||||||
|
BuilderObject.ParticipantName = _objectMessage.CurrentGroup.Elements[nxt].ParticipantName;
|
||||||
|
BuilderObject.GameRoundId = _objectMessage.CurrentGroup.GameRoundId;
|
||||||
|
BuilderObject.ParticipantId = _objectMessage.CurrentGroup.Elements[nxt].ParticipantId;
|
||||||
|
BuilderObject.Status = _objectMessage.CurrentGroup.Status;
|
||||||
|
|
||||||
|
// Alla poängposter från samtliga spelare i rundan samlas ihop och fördelas per deltagare
|
||||||
|
var localElements = _combined.roundBuilderElementsTotalById(_objectMessage.CurrentGroup.GameRoundId);
|
||||||
|
|
||||||
|
FillupResultTable(localElements);
|
||||||
|
foreach (var col in _playerColumns)
|
||||||
|
{
|
||||||
|
RoundElements.FirstOrDefault(e => e.ParticipantId == col.PlayerId).GameRegPoints = col.PlayerPoints;
|
||||||
|
}
|
||||||
|
TriggerRebuild();
|
||||||
|
}
|
||||||
|
return RoundElements;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void StoreAndHandlePoints()
|
||||||
|
{
|
||||||
|
var game = _roundsRepo.Get(BuilderObject.GameRoundId).GetAwaiter().GetResult();
|
||||||
|
var regNr = RoundElements.Count > 0 ? RoundElements.Max(e => e.GameRoundRegNr) + 1 : 1;
|
||||||
|
|
||||||
|
if (game.GameStatus == GamePointStatus.New)
|
||||||
|
{
|
||||||
|
game.GameStatus = GamePointStatus.InProgress;
|
||||||
|
regNr = regNr == 0 ? 1 : regNr;
|
||||||
|
_roundsRepo.Save(game);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
BuilderObject.Status = game.GameStatus;
|
||||||
|
var points = BuilderObject.GameRegPoints;
|
||||||
|
var newPoint = new GamePoint
|
||||||
|
{
|
||||||
|
ParticipantId = BuilderObject.ParticipantId,
|
||||||
|
GameRoundId = BuilderObject.GameRoundId,
|
||||||
|
GameDate = DateTime.Now,
|
||||||
|
GameRoundRegNr = regNr,
|
||||||
|
GameRegPoints = points
|
||||||
|
};
|
||||||
|
var pointId = _pointsRepo?.Save(newPoint).GetAwaiter().GetResult();
|
||||||
|
|
||||||
|
// Uppdatera listan med element
|
||||||
|
var tmpElements = _combined.roundBuilderElementsDbById(BuilderObject.GameRoundId);
|
||||||
|
RoundElements.Clear();
|
||||||
|
foreach (var item in tmpElements)
|
||||||
|
{
|
||||||
|
item.Status = GamePointStatus.InProgress;
|
||||||
|
RoundElements.Add(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Uppdatera spelaren som skall spela nästa
|
||||||
|
var nxt = nextPlayerElement();
|
||||||
|
BuilderObject.GameRegPoints = 0;
|
||||||
|
BuilderObject.ParticipantName = RoundElements[nxt].ParticipantName;
|
||||||
|
BuilderObject.ParticipantId = RoundElements[nxt].ParticipantId;
|
||||||
|
BuilderObject.GameRoundId = RoundElements[0].GameRoundId;
|
||||||
|
|
||||||
|
var localElements = _combined.roundBuilderElementsTotalById(BuilderObject.GameRoundId);
|
||||||
|
FillupResultTable(localElements);
|
||||||
|
foreach (var col in _playerColumns)
|
||||||
|
{
|
||||||
|
RoundElements.FirstOrDefault(e => e.ParticipantId == col.PlayerId).GameRegPoints = col.PlayerPoints;
|
||||||
|
}
|
||||||
|
TriggerRebuild();
|
||||||
|
}
|
||||||
|
|
||||||
|
private int nextPlayerElement()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < RoundElements.Count; i++)
|
||||||
|
{
|
||||||
|
if (RoundElements[i].GameRoundRegNr == -1 ||
|
||||||
|
(i > 0 && (RoundElements[i - 1].GameRoundRegNr > RoundElements[i].GameRoundRegNr)) ||
|
||||||
|
(i == 0 && RoundElements[i].GameRoundRegNr < RoundElements[RoundElements.Count - 1].GameRoundRegNr))
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void FillupResultTable(IEnumerable<RoundBuilderElement> elements)
|
||||||
|
{
|
||||||
|
if (_playerColumns != null)
|
||||||
|
{
|
||||||
|
_playerColumns.Clear();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_playerColumns = new Collection<PlayerColumn>();
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (elements.Any(g => g.GameRegPoints > 0))
|
||||||
|
if (BuilderObject.Status == GamePointStatus.InProgress)
|
||||||
|
{
|
||||||
|
PlayerColumn player = new PlayerColumn();
|
||||||
|
|
||||||
|
foreach (var element in elements)
|
||||||
|
{
|
||||||
|
player = _playerColumns.FirstOrDefault(p => p.PlayerId == element.ParticipantId);
|
||||||
|
|
||||||
|
if (player == null)
|
||||||
|
{
|
||||||
|
player = new PlayerColumn
|
||||||
|
{
|
||||||
|
PlayerName = element.ParticipantName,
|
||||||
|
PlayerId = element.ParticipantId,
|
||||||
|
PlayerPoints = 0
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (element.GameRegPoints > 0)
|
||||||
|
{
|
||||||
|
player.Values.Add(element.GameRegPoints.ToString());
|
||||||
|
player.PlayerPoints += element.GameRegPoints;
|
||||||
|
if (player.PlayerPoints > 10000)
|
||||||
|
{
|
||||||
|
var winner = RoundElements.FirstOrDefault(e => e.ParticipantId == player.PlayerId);
|
||||||
|
winner.Status = GamePointStatus.Winning;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//oldPart = element.ParticipantId;
|
||||||
|
|
||||||
|
if (!_playerColumns.Contains(player))
|
||||||
|
{
|
||||||
|
_playerColumns.Add(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Random slumper = new Random();
|
||||||
|
|
||||||
|
foreach (var element in elements)
|
||||||
|
{
|
||||||
|
var player = new PlayerColumn
|
||||||
|
{
|
||||||
|
PlayerName = element.ParticipantName
|
||||||
|
};
|
||||||
|
|
||||||
|
for (int i = 0; i < slumper.Next(6); i++)
|
||||||
|
{
|
||||||
|
player.Values.Add(slumper.Next(1, 10).ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
_playerColumns.Add(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async void ToggleSplash()
|
||||||
|
{
|
||||||
|
|
||||||
|
if (!_SplashShowing)
|
||||||
|
{
|
||||||
|
//_overlay.ShowSplash("Clcicked!", 5000);
|
||||||
|
await _splashService.ShowSplash("Clicked", 0);
|
||||||
|
_SplashShowing = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
await _splashService.HideAsync();
|
||||||
|
_SplashShowing = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void GobackAsync()
|
||||||
|
{
|
||||||
|
_appShell.RoundRunningVisible = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,274 @@
|
|||||||
|
using Common.Library;
|
||||||
|
using GreadyPoang.Core;
|
||||||
|
using GreadyPoang.DataLayer;
|
||||||
|
using GreadyPoang.EntityLayer;
|
||||||
|
using GreadyPoang.Services;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
|
namespace GreadyPoang.ViewModelLayer;
|
||||||
|
|
||||||
|
public class RoundStartingViewModel : ViewModelBase
|
||||||
|
{
|
||||||
|
#region Constructors
|
||||||
|
public RoundStartingViewModel() : base()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public RoundStartingViewModel(
|
||||||
|
IRepository<GameRound> roundsRepo,
|
||||||
|
IRepository<GamePoint> pointsRepo,
|
||||||
|
IMethodSharingService<Participant> sharingService,
|
||||||
|
ICombinedRepository combined,
|
||||||
|
IObjectMessageService objectMessage,
|
||||||
|
INavigationService nav,
|
||||||
|
IPageFactory factory,
|
||||||
|
ISplashService splashService,
|
||||||
|
AppShellViewModel appShellView
|
||||||
|
) : base()
|
||||||
|
{
|
||||||
|
_roundsRepo = roundsRepo;
|
||||||
|
_pointsRepo = pointsRepo;
|
||||||
|
_sharingService = sharingService;
|
||||||
|
_combined = combined;
|
||||||
|
_objectMessage = objectMessage;
|
||||||
|
_nav = nav;
|
||||||
|
_factory = factory;
|
||||||
|
_splashService = splashService;
|
||||||
|
_appShellView = appShellView;
|
||||||
|
_roundElements = new ObservableCollection<RoundBuilderElement>();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private GameRound? _GameRoundObject = new();
|
||||||
|
private ObservableCollection<RoundBuilderGroup> _GameRoundList = new();
|
||||||
|
private ObservableCollection<Participant> _ParticipantList = new();
|
||||||
|
private readonly IRepository<GameRound>? _roundsRepo;
|
||||||
|
private readonly IRepository<GamePoint> _pointsRepo;
|
||||||
|
private readonly IMethodSharingService<Participant> _sharingService;
|
||||||
|
private readonly ICombinedRepository _combined;
|
||||||
|
private readonly IObjectMessageService _objectMessage;
|
||||||
|
private readonly INavigationService _nav;
|
||||||
|
private readonly IPageFactory _factory;
|
||||||
|
private readonly ISplashService _splashService;
|
||||||
|
private readonly AppShellViewModel _appShellView;
|
||||||
|
private Participant _selectedItem;
|
||||||
|
|
||||||
|
private ObservableCollection<RoundBuilderElement> _roundElements;
|
||||||
|
|
||||||
|
public ObservableCollection<RoundBuilderElement> RoundElements
|
||||||
|
{
|
||||||
|
get { return _roundElements; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_roundElements = value;
|
||||||
|
RaisePropertyChanged(nameof(RoundElements));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Participant SelectedItem
|
||||||
|
{
|
||||||
|
get => _selectedItem;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_selectedItem != value)
|
||||||
|
{
|
||||||
|
|
||||||
|
_selectedItem = value;
|
||||||
|
RaisePropertyChanged(nameof(SelectedItem));
|
||||||
|
OnItemSelected(value); // Metod som triggas vid val
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnItemSelected(Participant item)
|
||||||
|
{
|
||||||
|
if (_roundElements.Count == 0)
|
||||||
|
{
|
||||||
|
var GameRound = new GameRound
|
||||||
|
{
|
||||||
|
GameRoundStartDate = DateTime.Now,
|
||||||
|
GameStatus = GamePointStatus.New,
|
||||||
|
GameRoundFinished = null
|
||||||
|
};
|
||||||
|
var gameRoundId = _roundsRepo?.Save(GameRound).GetAwaiter().GetResult();
|
||||||
|
if (gameRoundId != null && gameRoundId != -1)
|
||||||
|
{
|
||||||
|
GameRound.GameRoundId = gameRoundId.Value;
|
||||||
|
}
|
||||||
|
GameRoundObject = GameRound;
|
||||||
|
}
|
||||||
|
|
||||||
|
var GamePointStart = new GamePoint
|
||||||
|
{
|
||||||
|
ParticipantId = item.ParticipantId,
|
||||||
|
GameRoundId = GameRoundObject?.GameRoundId ?? 0,
|
||||||
|
GameDate = DateTime.Now,
|
||||||
|
GameRoundRegNr = -1,
|
||||||
|
GameRegPoints = 0
|
||||||
|
};
|
||||||
|
|
||||||
|
var gamePointId = _pointsRepo.Save(GamePointStart).GetAwaiter().GetResult();
|
||||||
|
GamePointStart.GamePointId = gamePointId;
|
||||||
|
|
||||||
|
var newElement = new RoundBuilderElement();
|
||||||
|
newElement.ParticipantId = item.ParticipantId;
|
||||||
|
newElement.ParticipantName = item.LastNameFirstName;
|
||||||
|
newElement.GameRoundRegNr = GamePointStart.GameRoundRegNr;
|
||||||
|
newElement.GameRegPoints = GamePointStart.GameRegPoints;
|
||||||
|
newElement.Status = GameRoundObject!.GameStatus;
|
||||||
|
newElement.GameRoundStartDate = GameRoundObject?.GameRoundStartDate ?? DateTime.Now;
|
||||||
|
newElement.GameRoundId = GamePointStart.GameRoundId;
|
||||||
|
newElement.GamePointId = GamePointStart.GamePointId;
|
||||||
|
|
||||||
|
_roundElements.Add(newElement);
|
||||||
|
// Gör något med det valda objektet
|
||||||
|
Debug.WriteLine($"Du valde: {item.LastNameFirstName}");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public GameRound? GameRoundObject
|
||||||
|
{
|
||||||
|
get { return _GameRoundObject; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_GameRoundObject = value;
|
||||||
|
RaisePropertyChanged(nameof(GameRoundObject));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ObservableCollection<RoundBuilderGroup> GameRoundList
|
||||||
|
{
|
||||||
|
get { return _GameRoundList; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_GameRoundList = value;
|
||||||
|
RaisePropertyChanged(nameof(GameRoundList));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ObservableCollection<Participant> ParticipantList
|
||||||
|
{
|
||||||
|
get { return _ParticipantList; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_ParticipantList = value;
|
||||||
|
RaisePropertyChanged(nameof(ParticipantList));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Get Method
|
||||||
|
public ObservableCollection<RoundBuilderGroup> Get()
|
||||||
|
{
|
||||||
|
if (_combined != null)
|
||||||
|
{
|
||||||
|
// var GameRoundSummary = _combined.roundBuilderElements();
|
||||||
|
var GameRoundSummary = _combined.roundBuilderElementsDb();
|
||||||
|
|
||||||
|
var groupedRounds = GameRoundSummary
|
||||||
|
.GroupBy(r => r.GameRoundId)
|
||||||
|
.Select(g => new RoundBuilderGroup
|
||||||
|
{
|
||||||
|
GameRoundId = g.Key,
|
||||||
|
GameRoundStartDate = g.First().GameRoundStartDate,
|
||||||
|
Status = g.First().Status,
|
||||||
|
Elements = g.Select(p => new RoundBuilderElement
|
||||||
|
{
|
||||||
|
ParticipantId = p.ParticipantId,
|
||||||
|
ParticipantName = p.ParticipantName,
|
||||||
|
GamePointId = p.GamePointId,
|
||||||
|
GameRoundRegNr = p.GameRoundRegNr,
|
||||||
|
GameRegPoints = p.GameRegPoints,
|
||||||
|
GameRoundId = p.GameRoundId,
|
||||||
|
GameRoundStartDate = p.GameRoundStartDate,
|
||||||
|
Status = g.First().Status
|
||||||
|
}).ToList()
|
||||||
|
})
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
GameRoundList = new ObservableCollection<RoundBuilderGroup>(groupedRounds);
|
||||||
|
|
||||||
|
}
|
||||||
|
return GameRoundList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ObservableCollection<Participant> GetParticipants()
|
||||||
|
{
|
||||||
|
ParticipantList = _sharingService.Get();
|
||||||
|
return ParticipantList;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Get(id) Method
|
||||||
|
public GameRound? Get(int id)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
GameRoundObject = _roundsRepo?.Get(id).GetAwaiter().GetResult();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
System.Diagnostics.Debug.WriteLine($"Error in Get method: {ex.Message}");
|
||||||
|
}
|
||||||
|
|
||||||
|
return GameRoundObject;
|
||||||
|
}
|
||||||
|
public virtual bool Save()
|
||||||
|
{
|
||||||
|
if (_roundsRepo == null || GameRoundObject == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var tmpTask = _roundsRepo.Save(GameRoundObject);
|
||||||
|
bool tmp = tmpTask.GetAwaiter().GetResult() != -1;
|
||||||
|
if (tmp)
|
||||||
|
{
|
||||||
|
GameRoundObject = new GameRound();
|
||||||
|
RoundElements.Clear();
|
||||||
|
this.Get();
|
||||||
|
}
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Rensa()
|
||||||
|
{
|
||||||
|
foreach (var element in RoundElements)
|
||||||
|
{
|
||||||
|
_pointsRepo.DeleteById(element.GamePointId);
|
||||||
|
}
|
||||||
|
_roundsRepo?.DeleteById(GameRoundObject?.GameRoundId ?? 0);
|
||||||
|
RoundElements.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async void RoundSelected(RoundBuilderElement element)
|
||||||
|
{
|
||||||
|
var rbGroup = GameRoundList.FirstOrDefault(g => g.GameRoundId == element.GameRoundId);
|
||||||
|
Debug.WriteLine($"Du valde raden med Runda {element.GameRoundId} och spelare: {element.ParticipantName}");
|
||||||
|
if (rbGroup != null)
|
||||||
|
{
|
||||||
|
_objectMessage.CurrentGroup = rbGroup;
|
||||||
|
_objectMessage.Delivered = true;
|
||||||
|
//await _splashService.ShowSplash("Runda vald, gå till\r\r 'Påbörja eller fortsätt Runda'", 3000);
|
||||||
|
await Shell.Current.GoToAsync("RoundRunningPage");
|
||||||
|
|
||||||
|
_appShellView.RoundRunningVisible = false;
|
||||||
|
//_roundRunning.GobackVisible = false;
|
||||||
|
//var page = _factory.CreateRoundPage();
|
||||||
|
//_nav.NavigateToPageAsync(page);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void SelectNewlyAddedParticipant(RoundBuilderElement roundBuilder)
|
||||||
|
{
|
||||||
|
Debug.WriteLine($"Du valde raden med Runda {roundBuilder.GameRoundId} och spelare: {roundBuilder.ParticipantName}");
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
}
|
||||||
103
Gready_Poang.ViewModelLayer/ViewModelClasses/SplashViewModel.cs
Normal file
103
Gready_Poang.ViewModelLayer/ViewModelClasses/SplashViewModel.cs
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
using Common.Library;
|
||||||
|
|
||||||
|
namespace GreadyPoang.ViewModelLayer;
|
||||||
|
|
||||||
|
public class SplashViewModel : ViewModelBase
|
||||||
|
{
|
||||||
|
// public event PropertyChangedEventHandler PropertyChanged;
|
||||||
|
|
||||||
|
private Color _splashBackgroundColor = Colors.DarkSlateBlue;
|
||||||
|
public Color SplashBackgroundColor
|
||||||
|
{
|
||||||
|
get => _splashBackgroundColor;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_splashBackgroundColor = value;
|
||||||
|
RaisePropertyChanged(nameof(SplashBackgroundColor));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private bool _isSplashVisible = false;
|
||||||
|
public bool IsSplashVisible
|
||||||
|
{
|
||||||
|
get => _isSplashVisible;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_isSplashVisible = value;
|
||||||
|
RaisePropertyChanged(nameof(IsSplashVisible));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private double _splashOpacity = 1.0;
|
||||||
|
public double SplashOpacity
|
||||||
|
{
|
||||||
|
get => _splashOpacity;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_splashOpacity = value;
|
||||||
|
RaisePropertyChanged(nameof(SplashOpacity));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Color _splashTextColor = Colors.White;
|
||||||
|
|
||||||
|
public Color SplashTextColor
|
||||||
|
{
|
||||||
|
get { return _splashTextColor; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_splashTextColor = value;
|
||||||
|
RaisePropertyChanged(nameof(SplashTextColor));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private double _splashTranslationY = 0;
|
||||||
|
public double SplashTranslationY
|
||||||
|
{
|
||||||
|
get => _splashTranslationY;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_splashTranslationY = value;
|
||||||
|
RaisePropertyChanged(nameof(SplashTranslationY));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task HideSplashAsync()
|
||||||
|
{
|
||||||
|
await Task.Delay(1000); // Simulera laddning
|
||||||
|
await AnimateSplashOut();
|
||||||
|
IsSplashVisible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string _splashText = "Välkommen!";
|
||||||
|
public string SplashText
|
||||||
|
{
|
||||||
|
get => _splashText;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_splashText = value;
|
||||||
|
RaisePropertyChanged(nameof(SplashText));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//public Color SplashBackgroundColor { get; set; } = Colors.DarkSlateBlue;
|
||||||
|
//public string SplashImage { get; set; } = "splash_icon.png";
|
||||||
|
|
||||||
|
//protected void OnPropertyChanged(string name) =>
|
||||||
|
// PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private async Task AnimateSplashOut()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 10; i++)
|
||||||
|
{
|
||||||
|
SplashOpacity -= 0.1;
|
||||||
|
//SplashTranslationY += 5;
|
||||||
|
await Task.Delay(30);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
68
Gready_Poang.sln
Normal file
68
Gready_Poang.sln
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 17
|
||||||
|
VisualStudioVersion = 17.14.36518.9 d17.14
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gready_Poang", "Gready_Poang\Gready_Poang.csproj", "{B237F7D6-3B04-49AE-81B0-FEFE21A94CA7}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common.Library", "Common.Library\Common.Library.csproj", "{28598B2A-3D61-4B2C-8EAE-A18583AB649D}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gready_Poang.EntityLayer", "Gready_Poang.EntityLayer\Gready_Poang.EntityLayer.csproj", "{AC6F90B7-EA62-477A-A748-9459AC3CB4E6}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gready_Poang.ViewModelLayer", "Gready_Poang.ViewModelLayer\Gready_Poang.ViewModelLayer.csproj", "{D58EEC8D-59E2-4C08-BE60-81EE79F87C8F}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gready_Poang.DataLayer", "Gready_Poang.DataLayer\Gready_Poang.DataLayer.csproj", "{48BD841F-C383-4E0B-963E-AC2400FCC678}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gready_Poang.Migrations", "Gready_Poang.Migrations\Gready_Poang.Migrations.csproj", "{56EB8207-E108-4498-82AC-BAC8966D3D2D}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gready_Poang.Services", "Gready_Poang.Services\Gready_Poang.Services.csproj", "{1C70F0EC-370D-4F48-AEDD-DB171D71EA2A}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gready_Poang.Common", "Gready_Poang.Common\Gready_Poang.Common.csproj", "{BEA80096-7267-4583-8982-A8000192CB31}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{B237F7D6-3B04-49AE-81B0-FEFE21A94CA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{B237F7D6-3B04-49AE-81B0-FEFE21A94CA7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{B237F7D6-3B04-49AE-81B0-FEFE21A94CA7}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
|
||||||
|
{B237F7D6-3B04-49AE-81B0-FEFE21A94CA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{B237F7D6-3B04-49AE-81B0-FEFE21A94CA7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{28598B2A-3D61-4B2C-8EAE-A18583AB649D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{28598B2A-3D61-4B2C-8EAE-A18583AB649D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{28598B2A-3D61-4B2C-8EAE-A18583AB649D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{28598B2A-3D61-4B2C-8EAE-A18583AB649D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{AC6F90B7-EA62-477A-A748-9459AC3CB4E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{AC6F90B7-EA62-477A-A748-9459AC3CB4E6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{AC6F90B7-EA62-477A-A748-9459AC3CB4E6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{AC6F90B7-EA62-477A-A748-9459AC3CB4E6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{D58EEC8D-59E2-4C08-BE60-81EE79F87C8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{D58EEC8D-59E2-4C08-BE60-81EE79F87C8F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{D58EEC8D-59E2-4C08-BE60-81EE79F87C8F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{D58EEC8D-59E2-4C08-BE60-81EE79F87C8F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{48BD841F-C383-4E0B-963E-AC2400FCC678}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{48BD841F-C383-4E0B-963E-AC2400FCC678}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{48BD841F-C383-4E0B-963E-AC2400FCC678}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{48BD841F-C383-4E0B-963E-AC2400FCC678}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{56EB8207-E108-4498-82AC-BAC8966D3D2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{56EB8207-E108-4498-82AC-BAC8966D3D2D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{56EB8207-E108-4498-82AC-BAC8966D3D2D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{56EB8207-E108-4498-82AC-BAC8966D3D2D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{1C70F0EC-370D-4F48-AEDD-DB171D71EA2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{1C70F0EC-370D-4F48-AEDD-DB171D71EA2A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{1C70F0EC-370D-4F48-AEDD-DB171D71EA2A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{1C70F0EC-370D-4F48-AEDD-DB171D71EA2A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{BEA80096-7267-4583-8982-A8000192CB31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{BEA80096-7267-4583-8982-A8000192CB31}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{BEA80096-7267-4583-8982-A8000192CB31}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{BEA80096-7267-4583-8982-A8000192CB31}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {6D6C046F-5DA7-45E4-9DBC-715DC1067E12}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
15
Gready_Poang/App.xaml
Normal file
15
Gready_Poang/App.xaml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version = "1.0" encoding = "UTF-8" ?>
|
||||||
|
<Application xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||||
|
xmlns:local="clr-namespace:GreadyPoang"
|
||||||
|
x:Class="GreadyPoang.App">
|
||||||
|
<Application.Resources>
|
||||||
|
<ResourceDictionary>
|
||||||
|
<ResourceDictionary.MergedDictionaries>
|
||||||
|
<ResourceDictionary Source="Resources/Styles/Colors.xaml" />
|
||||||
|
<ResourceDictionary Source="Resources/Styles/Styles.xaml" />
|
||||||
|
<ResourceDictionary Source="Resources/Styles/AppStyles.xaml" />
|
||||||
|
</ResourceDictionary.MergedDictionaries>
|
||||||
|
</ResourceDictionary>
|
||||||
|
</Application.Resources>
|
||||||
|
</Application>
|
||||||
38
Gready_Poang/App.xaml.cs
Normal file
38
Gready_Poang/App.xaml.cs
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
using GreadyPoang.DataLayer.Database;
|
||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
|
namespace GreadyPoang;
|
||||||
|
|
||||||
|
public partial class App : Application
|
||||||
|
{
|
||||||
|
private readonly IServiceProvider _services;
|
||||||
|
|
||||||
|
public App(IServiceProvider services, DataContext dataContext)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
dataContext.Database.EnsureCreated();
|
||||||
|
_services = services;
|
||||||
|
|
||||||
|
AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
|
||||||
|
{
|
||||||
|
if (Debugger.IsAttached)
|
||||||
|
Debugger.Break();
|
||||||
|
};
|
||||||
|
|
||||||
|
TaskScheduler.UnobservedTaskException += (sender, e) =>
|
||||||
|
{
|
||||||
|
if (Debugger.IsAttached)
|
||||||
|
Debugger.Break();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override Window CreateWindow(IActivationState? activationState)
|
||||||
|
{
|
||||||
|
|
||||||
|
//var splashVm = ServiceLocator.Services.GetRequiredService<SplashViewModelCommands>();
|
||||||
|
//var shell = new AppShell(splashVm);
|
||||||
|
|
||||||
|
var shell = _services.GetRequiredService<AppShell>();
|
||||||
|
return new Window(shell);
|
||||||
|
}
|
||||||
|
}
|
||||||
30
Gready_Poang/AppShell.xaml
Normal file
30
Gready_Poang/AppShell.xaml
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<Shell
|
||||||
|
x:Class="GreadyPoang.AppShell"
|
||||||
|
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||||
|
xmlns:vm ="clr-namespace:GreadyPoang.ViewModelLayer;assembly=GreadyPoang.ViewModelLayer"
|
||||||
|
xmlns:views="clr-namespace:GreadyPoang.Views"
|
||||||
|
xmlns:pages="clr-namespace:GreadyPoang.Pages"
|
||||||
|
xmlns:local="clr-namespace:GreadyPoang"
|
||||||
|
Title="GreadyPoang"
|
||||||
|
Shell.TitleColor="LightYellow"
|
||||||
|
x:DataType="vm:AppShellViewModel"
|
||||||
|
Shell.BackgroundColor="CadetBlue">
|
||||||
|
|
||||||
|
<TabBar>
|
||||||
|
<ShellContent
|
||||||
|
Title="Home" ContentTemplate="{DataTemplate local:MainPage}"
|
||||||
|
Route="MainPage" />
|
||||||
|
<ShellContent
|
||||||
|
Title="Deltagare" ContentTemplate="{DataTemplate pages:ParticipantListPage}"
|
||||||
|
Route="ParticipantListPage"/>
|
||||||
|
<ShellContent
|
||||||
|
Title="Ny Runda" ContentTemplate="{DataTemplate pages:RoundStartingPage}"
|
||||||
|
Route="RoundStartingPage"/>
|
||||||
|
<ShellContent
|
||||||
|
Title="Påbörja eller fortsätt Runda" ContentTemplate="{DataTemplate pages:RoundRunningPage}"
|
||||||
|
Route="RoundRunningPage" IsVisible="{Binding RoundRunningVisible}"/>
|
||||||
|
</TabBar>
|
||||||
|
|
||||||
|
</Shell>
|
||||||
21
Gready_Poang/AppShell.xaml.cs
Normal file
21
Gready_Poang/AppShell.xaml.cs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
using GreadyPoang.Core;
|
||||||
|
using GreadyPoang.ViewModelLayer;
|
||||||
|
|
||||||
|
namespace GreadyPoang
|
||||||
|
{
|
||||||
|
public partial class AppShell : Shell
|
||||||
|
{
|
||||||
|
private readonly IPageFactory _factory;
|
||||||
|
|
||||||
|
public AppShell(IPageFactory factory, AppShellViewModel appShellView)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
|
||||||
|
Routing.RegisterRoute("RoundStartingPage", typeof(Pages.RoundStartingPage));
|
||||||
|
Routing.RegisterRoute("ParticipantListPage", typeof(Pages.ParticipantListPage));
|
||||||
|
Routing.RegisterRoute("RoundRunningPage", typeof(Pages.RoundRunningPage));
|
||||||
|
_factory = factory;
|
||||||
|
BindingContext = appShellView;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
40
Gready_Poang/BasePage.xaml
Normal file
40
Gready_Poang/BasePage.xaml
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||||
|
x:Class="GreadyPoang.BasePage"
|
||||||
|
xmlns:viewsPartial="clr-namespace:GreadyPoang.ViewsPartial"
|
||||||
|
x:Name="Root">
|
||||||
|
<AbsoluteLayout>
|
||||||
|
<!-- Huvudinnehåll -->
|
||||||
|
<ContentView x:Name="MainContent"
|
||||||
|
AbsoluteLayout.LayoutBounds="0,0,1,1"
|
||||||
|
AbsoluteLayout.LayoutFlags="All" />
|
||||||
|
|
||||||
|
<!-- Overlay: Splash -->
|
||||||
|
<viewsPartial:SplashView
|
||||||
|
AbsoluteLayout.LayoutBounds="0,0,1,1"
|
||||||
|
AbsoluteLayout.LayoutFlags="All"
|
||||||
|
x:Name="SplashView"
|
||||||
|
IsVisible="True"
|
||||||
|
Opacity="1"
|
||||||
|
ZIndex="999"
|
||||||
|
TranslationY="{Binding SplashTranslationY}"
|
||||||
|
InputTransparent="True" >
|
||||||
|
</viewsPartial:SplashView>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
WidthRequest="250"
|
||||||
|
HeightRequest="150"
|
||||||
|
IsVisible="{Binding IsSplashVisible}"
|
||||||
|
BackgroundColor="{Binding SplashBackgroundColor}"
|
||||||
|
x:Name="SplashView"
|
||||||
|
BackgroundColor="Black"
|
||||||
|
Opacity="{Binding SplashOpacity}"
|
||||||
|
IsVisible="True"
|
||||||
|
Opacity="0.9"
|
||||||
|
ZIndex="999"
|
||||||
|
BackgroundColor="Black" />-->
|
||||||
|
|
||||||
|
|
||||||
|
</AbsoluteLayout>
|
||||||
|
</ContentPage>
|
||||||
13
Gready_Poang/BasePage.xaml.cs
Normal file
13
Gready_Poang/BasePage.xaml.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using GreadyPoang.CommandClasses;
|
||||||
|
|
||||||
|
namespace GreadyPoang;
|
||||||
|
|
||||||
|
public partial class BasePage : ContentPage
|
||||||
|
{
|
||||||
|
public BasePage(View content, SplashViewModelCommands splashVm)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
MainContent.Content = content;
|
||||||
|
SplashView.BindingContext = splashVm;
|
||||||
|
}
|
||||||
|
}
|
||||||
11
Gready_Poang/CommandClasses/AppShellViewModelCommands.cs
Normal file
11
Gready_Poang/CommandClasses/AppShellViewModelCommands.cs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
using GreadyPoang.ViewModelLayer;
|
||||||
|
|
||||||
|
namespace GreadyPoang.CommandClasses;
|
||||||
|
|
||||||
|
public class AppShellViewModelCommands : AppShellViewModel
|
||||||
|
{
|
||||||
|
public AppShellViewModelCommands() : base()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
15
Gready_Poang/CommandClasses/MainPageViewModelCommands.cs
Normal file
15
Gready_Poang/CommandClasses/MainPageViewModelCommands.cs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
using GreadyPoang.Services;
|
||||||
|
using GreadyPoang.ViewModelLayer;
|
||||||
|
|
||||||
|
namespace GreadyPoang.CommandClasses;
|
||||||
|
|
||||||
|
public class MainPageViewModelCommands : MainPageViewModel
|
||||||
|
{
|
||||||
|
public MainPageViewModelCommands(
|
||||||
|
AppShellViewModel appShell,
|
||||||
|
IObjectMessageService messageService
|
||||||
|
) : base(appShell, messageService)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
72
Gready_Poang/CommandClasses/ParticipantViewModelCommands.cs
Normal file
72
Gready_Poang/CommandClasses/ParticipantViewModelCommands.cs
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
using Common.Library;
|
||||||
|
using GreadyPoang.EntityLayer;
|
||||||
|
using GreadyPoang.Services;
|
||||||
|
using GreadyPoang.ViewModelLayer;
|
||||||
|
using System.Windows.Input;
|
||||||
|
|
||||||
|
|
||||||
|
namespace GreadyPoang.CommandClasses;
|
||||||
|
|
||||||
|
public class ParticipantViewModelCommands : ParticipantViewModel
|
||||||
|
{
|
||||||
|
#region constructors
|
||||||
|
public ParticipantViewModelCommands() : base()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public ParticipantViewModelCommands(
|
||||||
|
IRepository<Participant> repo,
|
||||||
|
IMethodSharingService<Participant> sharingService,
|
||||||
|
AppShellViewModel appShell,
|
||||||
|
IObjectMessageService objectMessage) : base(repo, sharingService, appShell, objectMessage)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Private Variables
|
||||||
|
private bool _IsSaveCommandEnabled = true;
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Public Properties
|
||||||
|
public bool IsSaveCommandEnabled
|
||||||
|
{
|
||||||
|
get { return _IsSaveCommandEnabled; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_IsSaveCommandEnabled = value;
|
||||||
|
RaisePropertyChanged(nameof(IsSaveCommandEnabled));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Commands
|
||||||
|
public ICommand SaveCommand { get; private set; }
|
||||||
|
public ICommand EditCommand { get; private set; }
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Init Method
|
||||||
|
public override void Init()
|
||||||
|
{
|
||||||
|
base.Init();
|
||||||
|
SaveCommand = new Command(async () => SaveAsync(), () => IsSaveCommandEnabled);
|
||||||
|
EditCommand = new Command<int>(async (id) => await EditAsync(id), (id) => id > 0);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
protected async Task EditAsync(int id)
|
||||||
|
{
|
||||||
|
await Shell.Current.GoToAsync($"{nameof(Views.ParticipantListView)}?id={id}");
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<bool> SaveAsync()
|
||||||
|
{
|
||||||
|
var ret = base.Save();
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
await Shell.Current.GoToAsync("..");
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
67
Gready_Poang/CommandClasses/RoundRunningViewModelCommands.cs
Normal file
67
Gready_Poang/CommandClasses/RoundRunningViewModelCommands.cs
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
using Common.Library;
|
||||||
|
using GreadyPoang.Core;
|
||||||
|
using GreadyPoang.DataLayer;
|
||||||
|
using GreadyPoang.EntityLayer;
|
||||||
|
using GreadyPoang.Services;
|
||||||
|
using GreadyPoang.ViewModelLayer;
|
||||||
|
using System.Windows.Input;
|
||||||
|
|
||||||
|
namespace GreadyPoang.CommandClasses;
|
||||||
|
|
||||||
|
public class RoundRunningViewModelCommands : RoundRunningViewModel
|
||||||
|
{
|
||||||
|
public RoundRunningViewModelCommands() : base()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public RoundRunningViewModelCommands(
|
||||||
|
IRepository<GameRound> roundsRepo,
|
||||||
|
IRepository<GamePoint> pointsRepo,
|
||||||
|
IMethodSharingService<Participant> sharingService,
|
||||||
|
ICombinedRepository combined,
|
||||||
|
IObjectMessageService objectMessage,
|
||||||
|
ISplashService splashService,
|
||||||
|
AppShellViewModel appShell)
|
||||||
|
: base(roundsRepo,
|
||||||
|
pointsRepo,
|
||||||
|
sharingService,
|
||||||
|
combined,
|
||||||
|
objectMessage,
|
||||||
|
splashService,
|
||||||
|
appShell)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Commands
|
||||||
|
public ICommand GobackCommand { get; private set; }
|
||||||
|
public ICommand StoreAndHandlePointsCommand { get; private set; }
|
||||||
|
public ICommand OnSplashClickedCommand { get; private set; }
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
public override void Init()
|
||||||
|
{
|
||||||
|
base.Init();
|
||||||
|
StoreAndHandlePointsCommand = new Command(async () => StoreAndHandleAsync());
|
||||||
|
OnSplashClickedCommand = new Command(async () => await ToggleSplash());
|
||||||
|
GobackCommand = new Command(async () => GobackAsync());
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void GobackAsync()
|
||||||
|
{
|
||||||
|
base.GobackAsync();
|
||||||
|
await Shell.Current.GoToAsync("..");
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task StoreAndHandleAsync()
|
||||||
|
{
|
||||||
|
base.StoreAndHandlePoints();
|
||||||
|
//await Shell.Current.GoToAsync("..");
|
||||||
|
// await Shell.Current.GoToAsync("RoundRunningPage");
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task ToggleSplash()
|
||||||
|
{
|
||||||
|
base.ToggleSplash();
|
||||||
|
}
|
||||||
|
}
|
||||||
115
Gready_Poang/CommandClasses/RoundStartingViewModelCommands.cs
Normal file
115
Gready_Poang/CommandClasses/RoundStartingViewModelCommands.cs
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
using Common.Library;
|
||||||
|
using GreadyPoang.Core;
|
||||||
|
using GreadyPoang.DataLayer;
|
||||||
|
using GreadyPoang.EntityLayer;
|
||||||
|
using GreadyPoang.Services;
|
||||||
|
using GreadyPoang.ViewModelLayer;
|
||||||
|
using System.Windows.Input;
|
||||||
|
|
||||||
|
namespace GreadyPoang.CommandClasses;
|
||||||
|
|
||||||
|
public class RoundStartingViewModelCommands : RoundStartingViewModel
|
||||||
|
{
|
||||||
|
public RoundStartingViewModelCommands() : base()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
public RoundStartingViewModelCommands(
|
||||||
|
IRepository<GameRound> roundsRepo,
|
||||||
|
IRepository<GamePoint> pointsRepo,
|
||||||
|
IMethodSharingService<Participant> sharingService,
|
||||||
|
ICombinedRepository combined,
|
||||||
|
IObjectMessageService objectMessage,
|
||||||
|
INavigationService nav,
|
||||||
|
IPageFactory factory,
|
||||||
|
ISplashService splashService,
|
||||||
|
AppShellViewModel appShell)
|
||||||
|
: base(roundsRepo,
|
||||||
|
pointsRepo,
|
||||||
|
sharingService,
|
||||||
|
combined,
|
||||||
|
objectMessage,
|
||||||
|
nav,
|
||||||
|
factory,
|
||||||
|
splashService,
|
||||||
|
appShell)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Private Variables
|
||||||
|
private bool _IsSaveCommandEnabled = true;
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Public Properties
|
||||||
|
public bool IsSaveCommandEnabled
|
||||||
|
{
|
||||||
|
get { return _IsSaveCommandEnabled; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_IsSaveCommandEnabled = value;
|
||||||
|
RaisePropertyChanged(nameof(IsSaveCommandEnabled));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Commands
|
||||||
|
public ICommand SaveCommand { get; private set; }
|
||||||
|
public ICommand EditCommand { get; private set; }
|
||||||
|
public ICommand RensaCommand { get; private set; }
|
||||||
|
public ICommand ElementTappedCommand { get; private set; }
|
||||||
|
public ICommand ParticipantTappedCommand { get; private set; }
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Init Method
|
||||||
|
public override void Init()
|
||||||
|
{
|
||||||
|
base.Init();
|
||||||
|
SaveCommand = new Command(async () => SaveAsync(), () => IsSaveCommandEnabled);
|
||||||
|
EditCommand = new Command<int>(async (id) => await EditAsync(id), (id) => id > 0);
|
||||||
|
RensaCommand = new Command(async () => RensaAsync());
|
||||||
|
ParticipantTappedCommand = new Command<RoundBuilderElement>(async (selectedParticipant) => SelectNewlyAddedParticipant(selectedParticipant));
|
||||||
|
ElementTappedCommand = new Command<RoundBuilderElement>((selectedElement) => RoundSelected(selectedElement));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task RensaAsync()
|
||||||
|
{
|
||||||
|
base.Rensa();
|
||||||
|
await Shell.Current.GoToAsync("..");
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
protected async Task EditAsync(int id)
|
||||||
|
{
|
||||||
|
await Shell.Current.GoToAsync($"{nameof(Views.RoundStartingView)}?id={id}");
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<bool> SaveAsync()
|
||||||
|
{
|
||||||
|
var ret = base.Save();
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
await Shell.Current.GoToAsync("..");
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<bool> RoundSelected(RoundBuilderElement element)
|
||||||
|
{
|
||||||
|
bool goneOk = false;
|
||||||
|
base.RoundSelected(element);
|
||||||
|
goneOk = true;
|
||||||
|
return goneOk;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<bool> SelectNewlyAddedParticipant(RoundBuilderElement roundBuilder)
|
||||||
|
{
|
||||||
|
bool goneOk = false;
|
||||||
|
base.SelectNewlyAddedParticipant(roundBuilder);
|
||||||
|
goneOk = true;
|
||||||
|
return goneOk;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
10
Gready_Poang/CommandClasses/SplashViewModelCommands.cs
Normal file
10
Gready_Poang/CommandClasses/SplashViewModelCommands.cs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
using GreadyPoang.ViewModelLayer;
|
||||||
|
|
||||||
|
namespace GreadyPoang.CommandClasses;
|
||||||
|
|
||||||
|
public class SplashViewModelCommands : SplashViewModel
|
||||||
|
{
|
||||||
|
public SplashViewModelCommands() : base()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
11
Gready_Poang/Core/NavigationService.cs
Normal file
11
Gready_Poang/Core/NavigationService.cs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
namespace GreadyPoang.Core;
|
||||||
|
|
||||||
|
public class NavigationService : INavigationService
|
||||||
|
{
|
||||||
|
|
||||||
|
public Task NavigateToAsync(string route)
|
||||||
|
=> Shell.Current.GoToAsync(route);
|
||||||
|
|
||||||
|
public Task NavigateToPageAsync(Page page)
|
||||||
|
=> Shell.Current.Navigation.PushAsync(page);
|
||||||
|
}
|
||||||
30
Gready_Poang/Core/PageFactory.cs
Normal file
30
Gready_Poang/Core/PageFactory.cs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
using GreadyPoang.CommandClasses;
|
||||||
|
using GreadyPoang.Core;
|
||||||
|
using GreadyPoang.Pages;
|
||||||
|
|
||||||
|
namespace GreadyPoang;
|
||||||
|
|
||||||
|
public class PageFactory : IPageFactory
|
||||||
|
{
|
||||||
|
private readonly IServiceProvider _services;
|
||||||
|
|
||||||
|
public PageFactory(IServiceProvider services)
|
||||||
|
{
|
||||||
|
_services = services;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Page CreateRoundPage()
|
||||||
|
{
|
||||||
|
var vm = _services.GetRequiredService<RoundRunningViewModelCommands>();
|
||||||
|
var splashVm = _services.GetRequiredService<SplashViewModelCommands>();
|
||||||
|
return new RoundRunningPage(vm, splashVm);
|
||||||
|
}
|
||||||
|
|
||||||
|
//public Page CreateStatsPage()
|
||||||
|
//{
|
||||||
|
// //var vm = _services.GetRequiredService<StatsViewModel>();
|
||||||
|
// //var splashVm = _services.GetRequiredService<SplashViewModelCommands>();
|
||||||
|
// //var view = new StatsView { BindingContext = vm };
|
||||||
|
// //return new StatsPage(view, splashVm);
|
||||||
|
//}
|
||||||
|
}
|
||||||
10
Gready_Poang/Core/ServiceLocator.cs
Normal file
10
Gready_Poang/Core/ServiceLocator.cs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
using GreadyPoang.InterFaces;
|
||||||
|
|
||||||
|
namespace GreadyPoang;
|
||||||
|
|
||||||
|
public class ServiceLocator : IServiceLocator
|
||||||
|
{
|
||||||
|
public static IServiceProvider? Services { get; set; } = default;
|
||||||
|
public T Get<T>() => (T)Services!.GetService(typeof(T))!;
|
||||||
|
|
||||||
|
}
|
||||||
111
Gready_Poang/Gready_Poang.csproj
Normal file
111
Gready_Poang/Gready_Poang.csproj
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFrameworks>net9.0-android;net9.0-ios;net9.0-maccatalyst</TargetFrameworks>
|
||||||
|
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net9.0-windows10.0.19041.0</TargetFrameworks>
|
||||||
|
<!-- Uncomment to also build the tizen app. You will need to install tizen by following this: https://github.com/Samsung/Tizen.NET -->
|
||||||
|
<!-- <TargetFrameworks>$(TargetFrameworks);net9.0-tizen</TargetFrameworks> -->
|
||||||
|
|
||||||
|
<!-- Note for MacCatalyst:
|
||||||
|
The default runtime is maccatalyst-x64, except in Release config, in which case the default is maccatalyst-x64;maccatalyst-arm64.
|
||||||
|
When specifying both architectures, use the plural <RuntimeIdentifiers> instead of the singular <RuntimeIdentifier>.
|
||||||
|
The Mac App Store will NOT accept apps with ONLY maccatalyst-arm64 indicated;
|
||||||
|
either BOTH runtimes must be indicated or ONLY macatalyst-x64. -->
|
||||||
|
<!-- For example: <RuntimeIdentifiers>maccatalyst-x64;maccatalyst-arm64</RuntimeIdentifiers> -->
|
||||||
|
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<RootNamespace>Gready_Poang</RootNamespace>
|
||||||
|
<UseMaui>true</UseMaui>
|
||||||
|
<SingleProject>true</SingleProject>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
|
||||||
|
<!-- Display name -->
|
||||||
|
<ApplicationTitle>Gready_Poang</ApplicationTitle>
|
||||||
|
|
||||||
|
<!-- App Identifier -->
|
||||||
|
<ApplicationId>com.companyname.Gready_Poang</ApplicationId>
|
||||||
|
|
||||||
|
<!-- Versions -->
|
||||||
|
<ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
|
||||||
|
<ApplicationVersion>1</ApplicationVersion>
|
||||||
|
|
||||||
|
<!-- To develop, package, and publish an app to the Microsoft Store, see: https://aka.ms/MauiTemplateUnpackaged -->
|
||||||
|
<WindowsPackageType>None</WindowsPackageType>
|
||||||
|
|
||||||
|
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">15.0</SupportedOSPlatformVersion>
|
||||||
|
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">15.0</SupportedOSPlatformVersion>
|
||||||
|
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">21.0</SupportedOSPlatformVersion>
|
||||||
|
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</SupportedOSPlatformVersion>
|
||||||
|
<TargetPlatformMinVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</TargetPlatformMinVersion>
|
||||||
|
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'tizen'">6.5</SupportedOSPlatformVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<!-- App Icon -->
|
||||||
|
<MauiIcon Include="Resources\AppIcon\appicon.svg" ForegroundFile="Resources\AppIcon\appiconfg.svg" Color="#512BD4" />
|
||||||
|
|
||||||
|
<!-- Splash Screen -->
|
||||||
|
<MauiSplashScreen Include="Resources\Splash\splash.svg" Color="#512BD4" BaseSize="128,128" />
|
||||||
|
|
||||||
|
<!-- Images -->
|
||||||
|
<MauiImage Include="Resources\Images\*" />
|
||||||
|
<MauiImage Update="Resources\Images\dotnet_bot.png" Resize="True" BaseSize="300,185" />
|
||||||
|
|
||||||
|
<!-- Custom Fonts -->
|
||||||
|
<MauiFont Include="Resources\Fonts\*" />
|
||||||
|
|
||||||
|
<!-- Raw Assets (also remove the "Resources\Raw" prefix) -->
|
||||||
|
<MauiAsset Include="Resources\Raw\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.Maui.Controls" Version="9.0.100" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="9.0.0" />
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.8" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Common.Library\Common.Library.csproj" />
|
||||||
|
<ProjectReference Include="..\Gready_Poang.Common\Gready_Poang.Common.csproj" />
|
||||||
|
<ProjectReference Include="..\Gready_Poang.DataLayer\Gready_Poang.DataLayer.csproj" />
|
||||||
|
<ProjectReference Include="..\Gready_Poang.EntityLayer\Gready_Poang.EntityLayer.csproj" />
|
||||||
|
<!--<ProjectReference Include="..\Gready_Poang.Services\Gready_Poang.Services.csproj" />-->
|
||||||
|
<ProjectReference Include="..\Gready_Poang.ViewModelLayer\Gready_Poang.ViewModelLayer.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Update="Views\ParticipantListView.xaml.cs">
|
||||||
|
<DependentUpon>ParticipantListView.xaml</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<MauiXaml Update="BasePage.xaml">
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</MauiXaml>
|
||||||
|
<MauiXaml Update="Resources\Styles\AppStyles.xaml">
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</MauiXaml>
|
||||||
|
<MauiXaml Update="ViewsPartial\HeaderView.xaml">
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</MauiXaml>
|
||||||
|
<MauiXaml Update="Views\ParticipantListView.xaml">
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</MauiXaml>
|
||||||
|
<MauiXaml Update="Views\RoundRunningView.xaml">
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</MauiXaml>
|
||||||
|
<MauiXaml Update="Views\RoundStartingView.xaml">
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</MauiXaml>
|
||||||
|
<MauiXaml Update="ViewsPartial\SplashView.xaml">
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</MauiXaml>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="ViewHelpers\" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
12
Gready_Poang/InterFaces/IServiceLocator.cs
Normal file
12
Gready_Poang/InterFaces/IServiceLocator.cs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace GreadyPoang.InterFaces;
|
||||||
|
|
||||||
|
public interface IServiceLocator
|
||||||
|
{
|
||||||
|
T Get<T>();
|
||||||
|
}
|
||||||
34
Gready_Poang/LocalServices/Implements/SplashService.cs
Normal file
34
Gready_Poang/LocalServices/Implements/SplashService.cs
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
using GreadyPoang.CommandClasses;
|
||||||
|
using GreadyPoang.Core;
|
||||||
|
|
||||||
|
namespace GreadyPoang.LocalServices;
|
||||||
|
|
||||||
|
public class SplashService : ISplashService
|
||||||
|
{
|
||||||
|
private readonly SplashViewModelCommands _viewModel;
|
||||||
|
|
||||||
|
public SplashService(SplashViewModelCommands viewModel)
|
||||||
|
{
|
||||||
|
_viewModel = viewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task ShowSplash(string text = "Välkommen!", int durationMs = 3000)
|
||||||
|
{
|
||||||
|
_viewModel.SplashText = text;
|
||||||
|
_viewModel.SplashOpacity = 0.8;
|
||||||
|
_viewModel.SplashBackgroundColor = Colors.DodgerBlue;
|
||||||
|
_viewModel.IsSplashVisible = true;
|
||||||
|
//await Task.Yield(); // ger UI-tråden en chans att uppdatera
|
||||||
|
if (durationMs > 0)
|
||||||
|
{
|
||||||
|
await Task.Delay(durationMs);
|
||||||
|
_viewModel.IsSplashVisible = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task HideAsync()
|
||||||
|
{
|
||||||
|
//_viewModel.IsSplashVisible = false;
|
||||||
|
await _viewModel.HideSplashAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
28
Gready_Poang/MainPage.xaml
Normal file
28
Gready_Poang/MainPage.xaml
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||||
|
xmlns:partial="clr-namespace:GreadyPoang.ViewsPartial"
|
||||||
|
x:Class="GreadyPoang.MainPage"
|
||||||
|
xmlns:vm ="clr-namespace:GreadyPoang.CommandClasses"
|
||||||
|
x:DataType="vm:MainPageViewModelCommands"
|
||||||
|
Background="LightCyan"
|
||||||
|
Title="{StaticResource ApplicationTitle}">
|
||||||
|
<Grid Style="{StaticResource Grid.Page}">
|
||||||
|
<partial:HeaderView Grid.Row="0"
|
||||||
|
Grid.ColumnSpan="2"
|
||||||
|
ViewTitle="{StaticResource ApplicationTitle}"
|
||||||
|
ViewDescription="Välkommen till Gready">
|
||||||
|
|
||||||
|
</partial:HeaderView>
|
||||||
|
<Image
|
||||||
|
Source="snurrtarning.gif"
|
||||||
|
IsAnimationPlaying="True"
|
||||||
|
HorizontalOptions="Center"
|
||||||
|
VerticalOptions="Center"
|
||||||
|
Aspect="AspectFit"
|
||||||
|
Grid.Row="1"
|
||||||
|
Grid.Column="0"
|
||||||
|
HeightRequest="250"
|
||||||
|
Margin="10"/>
|
||||||
|
</Grid>
|
||||||
|
</ContentPage>
|
||||||
23
Gready_Poang/MainPage.xaml.cs
Normal file
23
Gready_Poang/MainPage.xaml.cs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
using GreadyPoang.CommandClasses;
|
||||||
|
|
||||||
|
namespace GreadyPoang;
|
||||||
|
|
||||||
|
public partial class MainPage : ContentPage
|
||||||
|
{
|
||||||
|
private readonly MainPageViewModelCommands _mainPage;
|
||||||
|
|
||||||
|
public MainPage(
|
||||||
|
MainPageViewModelCommands mainPage)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
BindingContext = mainPage;
|
||||||
|
_mainPage = mainPage;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnAppearing()
|
||||||
|
{
|
||||||
|
base.OnAppearing();
|
||||||
|
_mainPage.InitMessage();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
81
Gready_Poang/MauiProgram.cs
Normal file
81
Gready_Poang/MauiProgram.cs
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
using Common.Library;
|
||||||
|
using GreadyPoang.CommandClasses;
|
||||||
|
using GreadyPoang.Core;
|
||||||
|
using GreadyPoang.DataLayer;
|
||||||
|
using GreadyPoang.DataLayer.Database;
|
||||||
|
using GreadyPoang.EntityLayer;
|
||||||
|
using GreadyPoang.InterFaces;
|
||||||
|
using GreadyPoang.LocalServices;
|
||||||
|
using GreadyPoang.Services;
|
||||||
|
using GreadyPoang.ViewModelLayer;
|
||||||
|
using GreadyPoang.Views;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace GreadyPoang;
|
||||||
|
|
||||||
|
public static class MauiProgram
|
||||||
|
{
|
||||||
|
public static MauiApp CreateMauiApp()
|
||||||
|
{
|
||||||
|
var builder = MauiApp.CreateBuilder();
|
||||||
|
|
||||||
|
builder
|
||||||
|
.UseMauiApp<App>()
|
||||||
|
.ConfigureFonts(fonts =>
|
||||||
|
{
|
||||||
|
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
|
||||||
|
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
builder.Services.AddDbContext<DataContext>(options =>
|
||||||
|
{
|
||||||
|
var MauiDataPath = FileSystem.Current.AppDataDirectory;
|
||||||
|
if (!File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MauiDataPath_GreadyPoang.txt"))) ;
|
||||||
|
{
|
||||||
|
File.WriteAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MauiDataPath_GreadyPoang.txt"), MauiDataPath);
|
||||||
|
}
|
||||||
|
var dbPath = Path.Combine(MauiDataPath, "PoangDB.db");
|
||||||
|
options.UseSqlite($"Data Source={dbPath}");
|
||||||
|
});
|
||||||
|
|
||||||
|
builder.Services.AddScoped<IPageFactory, PageFactory>();
|
||||||
|
builder.Services.AddSingleton<INavigationService, NavigationService>();
|
||||||
|
builder.Services.AddSingleton<IServiceLocator, ServiceLocator>();
|
||||||
|
|
||||||
|
builder.Services.AddScoped<IRepository<Participant>, ParticipantRepository>();
|
||||||
|
builder.Services.AddScoped<ParticipantViewModelCommands>();
|
||||||
|
builder.Services.AddScoped<ParticipantListView>();
|
||||||
|
|
||||||
|
builder.Services.AddScoped<IRepository<GameRound>, GameRoundRepository>();
|
||||||
|
builder.Services.AddScoped<RoundStartingViewModelCommands>();
|
||||||
|
builder.Services.AddScoped<RoundStartingView>();
|
||||||
|
|
||||||
|
builder.Services.AddScoped<IRepository<GamePoint>, GamePointRepository>();
|
||||||
|
builder.Services.AddScoped<RoundRunningViewModelCommands>();
|
||||||
|
builder.Services.AddScoped<RoundRunningView>();
|
||||||
|
|
||||||
|
builder.Services.AddScoped<IMethodSharingService<Participant>, MethodSharingService>();
|
||||||
|
builder.Services.AddScoped<ICombinedRepository, CombinedRepository>();
|
||||||
|
|
||||||
|
builder.Services.AddSingleton<IObjectMessageService, ObjectMessageService>();
|
||||||
|
|
||||||
|
builder.Services.AddSingleton<AppShellViewModel>();
|
||||||
|
builder.Services.AddSingleton<AppShell>();
|
||||||
|
|
||||||
|
builder.Services.AddSingleton<SplashViewModelCommands>();
|
||||||
|
builder.Services.AddSingleton<ISplashService, SplashService>();
|
||||||
|
|
||||||
|
builder.Services.AddSingleton<MainPageViewModelCommands>();
|
||||||
|
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
builder.Logging.AddDebug();
|
||||||
|
#endif
|
||||||
|
var app = builder.Build();
|
||||||
|
ServiceLocator.Services = app.Services;
|
||||||
|
return app;
|
||||||
|
}
|
||||||
|
}
|
||||||
24
Gready_Poang/Pages/ParticipantListPage.cs
Normal file
24
Gready_Poang/Pages/ParticipantListPage.cs
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
using GreadyPoang.CommandClasses;
|
||||||
|
using GreadyPoang.Views;
|
||||||
|
|
||||||
|
namespace GreadyPoang.Pages;
|
||||||
|
|
||||||
|
public class ParticipantListPage : BasePage
|
||||||
|
{
|
||||||
|
private readonly ParticipantViewModelCommands _vm;
|
||||||
|
|
||||||
|
public ParticipantListPage(ParticipantViewModelCommands vm, SplashViewModelCommands splashVm)
|
||||||
|
: base(new ParticipantListView(vm), splashVm)
|
||||||
|
{
|
||||||
|
Title = "Deltagar Lista";
|
||||||
|
_vm = vm;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnAppearing()
|
||||||
|
{
|
||||||
|
base.OnAppearing();
|
||||||
|
BindingContext = _vm;
|
||||||
|
_vm.Get();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
43
Gready_Poang/Pages/RoundRunningPage.cs
Normal file
43
Gready_Poang/Pages/RoundRunningPage.cs
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
using GreadyPoang.CommandClasses;
|
||||||
|
using GreadyPoang.Core;
|
||||||
|
using GreadyPoang.Views;
|
||||||
|
|
||||||
|
namespace GreadyPoang.Pages;
|
||||||
|
|
||||||
|
public class RoundRunningPage : BasePage
|
||||||
|
{
|
||||||
|
private readonly RoundRunningViewModelCommands _vm;
|
||||||
|
private readonly SplashViewModelCommands _splashVm;
|
||||||
|
public ISplashService Splash { get; set; }
|
||||||
|
|
||||||
|
public RoundRunningPage(RoundRunningViewModelCommands Vm, SplashViewModelCommands splashVm)
|
||||||
|
: base(new RoundRunningView(Vm), splashVm)
|
||||||
|
{
|
||||||
|
Title = "Starta/Fortsätt runda";
|
||||||
|
_vm = Vm;
|
||||||
|
Splash = ServiceLocator.Services?.GetRequiredService<ISplashService>();
|
||||||
|
_splashVm = splashVm;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public SplashViewModelCommands SplashVm { get; }
|
||||||
|
|
||||||
|
protected override async void OnAppearing()
|
||||||
|
{
|
||||||
|
base.OnAppearing();
|
||||||
|
BindingContext = _vm;
|
||||||
|
_vm.Get();
|
||||||
|
//BuildScoreGrid(ViewModel.PlayerColumns); // <-- här bygger du layouten
|
||||||
|
//// _vm.RebuildRequested += ViewModel_RebuildRequested;
|
||||||
|
if (_splashVm != null)
|
||||||
|
{
|
||||||
|
await Splash.ShowSplash("Nu kan du spela vidare", 3000);
|
||||||
|
//await Splash.ShowSplash("Nu kan du spela vidare", 3000).GetAwaiter().GetResult();
|
||||||
|
}
|
||||||
|
//_splashVm.ShowSplash("Nu kan du spela vidare").GetAwaiter().GetResult(); ;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
25
Gready_Poang/Pages/RoundStartingPage.cs
Normal file
25
Gready_Poang/Pages/RoundStartingPage.cs
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
using GreadyPoang.CommandClasses;
|
||||||
|
using GreadyPoang.Views;
|
||||||
|
|
||||||
|
namespace GreadyPoang.Pages;
|
||||||
|
|
||||||
|
public class RoundStartingPage : BasePage
|
||||||
|
{
|
||||||
|
private readonly RoundStartingViewModelCommands _vm;
|
||||||
|
|
||||||
|
public RoundStartingPage(RoundStartingViewModelCommands vm, SplashViewModelCommands splashVm)
|
||||||
|
: base(new RoundStartingView(vm), splashVm)
|
||||||
|
{
|
||||||
|
Title = "Starta ny Runda";
|
||||||
|
_vm = vm;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnAppearing()
|
||||||
|
{
|
||||||
|
base.OnAppearing();
|
||||||
|
BindingContext = _vm;
|
||||||
|
_vm.Get();
|
||||||
|
_vm.GetParticipants();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
6
Gready_Poang/Platforms/Android/AndroidManifest.xml
Normal file
6
Gready_Poang/Platforms/Android/AndroidManifest.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.idoit4u.Gready_Poang" android:versionCode="1" android:versionName="conqueror" android:installLocation="auto">
|
||||||
|
<application android:allowBackup="true" android:icon="@mipmap/appicon" android:supportsRtl="true" android:label="Gready_Poang"></application>
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
|
</manifest>
|
||||||
11
Gready_Poang/Platforms/Android/MainActivity.cs
Normal file
11
Gready_Poang/Platforms/Android/MainActivity.cs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
using Android.App;
|
||||||
|
using Android.Content.PM;
|
||||||
|
using Android.OS;
|
||||||
|
|
||||||
|
namespace GreadyPoang
|
||||||
|
{
|
||||||
|
[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, LaunchMode = LaunchMode.SingleTop, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]
|
||||||
|
public class MainActivity : MauiAppCompatActivity
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
16
Gready_Poang/Platforms/Android/MainApplication.cs
Normal file
16
Gready_Poang/Platforms/Android/MainApplication.cs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
using Android.App;
|
||||||
|
using Android.Runtime;
|
||||||
|
|
||||||
|
namespace GreadyPoang
|
||||||
|
{
|
||||||
|
[Application]
|
||||||
|
public class MainApplication : MauiApplication
|
||||||
|
{
|
||||||
|
public MainApplication(IntPtr handle, JniHandleOwnership ownership)
|
||||||
|
: base(handle, ownership)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<color name="colorPrimary">#512BD4</color>
|
||||||
|
<color name="colorPrimaryDark">#2B0B98</color>
|
||||||
|
<color name="colorAccent">#2B0B98</color>
|
||||||
|
</resources>
|
||||||
10
Gready_Poang/Platforms/MacCatalyst/AppDelegate.cs
Normal file
10
Gready_Poang/Platforms/MacCatalyst/AppDelegate.cs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
using Foundation;
|
||||||
|
|
||||||
|
namespace GreadyPoang
|
||||||
|
{
|
||||||
|
[Register("AppDelegate")]
|
||||||
|
public class AppDelegate : MauiUIApplicationDelegate
|
||||||
|
{
|
||||||
|
protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
|
||||||
|
}
|
||||||
|
}
|
||||||
14
Gready_Poang/Platforms/MacCatalyst/Entitlements.plist
Normal file
14
Gready_Poang/Platforms/MacCatalyst/Entitlements.plist
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<!-- See https://aka.ms/maui-publish-app-store#add-entitlements for more information about adding entitlements.-->
|
||||||
|
<dict>
|
||||||
|
<!-- App Sandbox must be enabled to distribute a MacCatalyst app through the Mac App Store. -->
|
||||||
|
<key>com.apple.security.app-sandbox</key>
|
||||||
|
<true/>
|
||||||
|
<!-- When App Sandbox is enabled, this value is required to open outgoing network connections. -->
|
||||||
|
<key>com.apple.security.network.client</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
|
|
||||||
38
Gready_Poang/Platforms/MacCatalyst/Info.plist
Normal file
38
Gready_Poang/Platforms/MacCatalyst/Info.plist
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<!-- The Mac App Store requires you specify if the app uses encryption. -->
|
||||||
|
<!-- Please consult https://developer.apple.com/documentation/bundleresources/information_property_list/itsappusesnonexemptencryption -->
|
||||||
|
<!-- <key>ITSAppUsesNonExemptEncryption</key> -->
|
||||||
|
<!-- Please indicate <true/> or <false/> here. -->
|
||||||
|
|
||||||
|
<!-- Specify the category for your app here. -->
|
||||||
|
<!-- Please consult https://developer.apple.com/documentation/bundleresources/information_property_list/lsapplicationcategorytype -->
|
||||||
|
<!-- <key>LSApplicationCategoryType</key> -->
|
||||||
|
<!-- <string>public.app-category.YOUR-CATEGORY-HERE</string> -->
|
||||||
|
<key>UIDeviceFamily</key>
|
||||||
|
<array>
|
||||||
|
<integer>2</integer>
|
||||||
|
</array>
|
||||||
|
<key>UIRequiredDeviceCapabilities</key>
|
||||||
|
<array>
|
||||||
|
<string>arm64</string>
|
||||||
|
</array>
|
||||||
|
<key>UISupportedInterfaceOrientations</key>
|
||||||
|
<array>
|
||||||
|
<string>UIInterfaceOrientationPortrait</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||||
|
</array>
|
||||||
|
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||||
|
<array>
|
||||||
|
<string>UIInterfaceOrientationPortrait</string>
|
||||||
|
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||||
|
</array>
|
||||||
|
<key>XSAppIconAssets</key>
|
||||||
|
<string>Assets.xcassets/appicon.appiconset</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
16
Gready_Poang/Platforms/MacCatalyst/Program.cs
Normal file
16
Gready_Poang/Platforms/MacCatalyst/Program.cs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
using ObjCRuntime;
|
||||||
|
using UIKit;
|
||||||
|
|
||||||
|
namespace GreadyPoang
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
// This is the main entry point of the application.
|
||||||
|
static void Main(string[] args)
|
||||||
|
{
|
||||||
|
// if you want to use a different Application Delegate class from "AppDelegate"
|
||||||
|
// you can specify it here.
|
||||||
|
UIApplication.Main(args, null, typeof(AppDelegate));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user