Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
H
HIAST-Clinics
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
almohanad.hafez
HIAST-Clinics
Commits
5d8df969
Unverified
Commit
5d8df969
authored
Aug 16, 2024
by
Almouhannad Hafez
Committed by
GitHub
Aug 16, 2024
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #3 from Almouhannad/B_Add-repositories
B add repositories
parents
ebcadca6
38958499
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
203 additions
and
0 deletions
+203
-0
IRepository.cs
Clinics.Backend/Domain/Repositories/Base/IRepository.cs
+36
-0
Repositroy.cs
Clinics.Backend/Persistence/Repositories/Base/Repositroy.cs
+77
-0
Specification.cs
....Backend/Persistence/Specifications/Base/Specification.cs
+51
-0
SpecificationEvaluator.cs
...stence/Specifications/Evaluator/SpecificationEvaluator.cs
+39
-0
No files found.
Clinics.Backend/Domain/Repositories/Base/IRepository.cs
0 → 100644
View file @
5d8df969
using
Domain.Primitives
;
namespace
Domain.Repositories.Base
{
// CRUD operations
public
interface
IRepository
<
TEntity
>
where
TEntity
:
Entity
{
#
region
Create
operation
public
Task
<
TEntity
>
CreateAsync
(
TEntity
entity
);
#
endregion
#
region
Read
operations
public
Task
<
TEntity
?>
GetByIdAsync
(
int
id
);
public
Task
<
ICollection
<
TEntity
>>
GetAllAsync
();
#
endregion
#
region
Update
oprtation
public
Task
<
TEntity
>
UpdateAsync
(
TEntity
entity
);
#
endregion
#
region
Delete
operation
public
Task
DeleteAsync
(
int
id
);
#
endregion
}
}
Clinics.Backend/Persistence/Repositories/Base/Repositroy.cs
0 → 100644
View file @
5d8df969
using
Domain.Primitives
;
using
Domain.Repositories.Base
;
using
Microsoft.EntityFrameworkCore
;
using
Persistence.Context
;
namespace
Persistence.Repositories.Base
;
public
class
Repositroy
<
TEntity
>
:
IRepository
<
TEntity
>
where
TEntity
:
Entity
{
#
region
Ctor
DI
for
context
private
readonly
ClinicsDbContext
_context
;
public
Repositroy
(
ClinicsDbContext
context
)
{
_context
=
context
;
}
#
endregion
#
region
Apply
specification
#
endregion
#
region
CRUD
#
region
Create
operation
public
async
Task
<
TEntity
>
CreateAsync
(
TEntity
entity
)
{
return
await
_context
.
Set
<
TEntity
>().
FirstAsync
(
e
=>
e
.
Id
==
entity
.
Id
);
}
#
endregion
#
region
Read
operations
public
async
Task
<
TEntity
?>
GetByIdAsync
(
int
id
)
{
return
await
_context
.
Set
<
TEntity
>().
FindAsync
(
id
);
}
public
async
Task
<
ICollection
<
TEntity
>>
GetAllAsync
()
{
return
await
_context
.
Set
<
TEntity
>().
ToListAsync
<
TEntity
>();
}
#
endregion
#
region
Update
operation
public
async
Task
<
TEntity
>
UpdateAsync
(
TEntity
entity
)
{
var
query
=
_context
.
Set
<
TEntity
>().
Update
(
entity
);
await
_context
.
SaveChangesAsync
();
return
query
.
Entity
;
}
#
endregion
#
region
Delete
operation
public
async
Task
DeleteAsync
(
int
id
)
{
var
entity
=
await
GetByIdAsync
(
id
);
if
(
entity
is
not
null
)
_context
.
Set
<
TEntity
>().
Remove
(
entity
);
await
_context
.
SaveChangesAsync
();
}
#
endregion
#
endregion
}
Clinics.Backend/Persistence/Specifications/Base/Specification.cs
0 → 100644
View file @
5d8df969
using
Domain.Primitives
;
using
System.Linq.Expressions
;
namespace
Persistence.Specifications.Base
;
public
abstract
class
Specification
<
TEntity
>
where
TEntity
:
Entity
{
protected
Specification
(
Expression
<
Func
<
TEntity
,
bool
>>?
criteria
)
{
Criteria
=
criteria
;
}
#
region
Where
criteria
public
Expression
<
Func
<
TEntity
,
bool
>>?
Criteria
{
get
;
}
#
endregion
#
region
Includes
public
List
<
Expression
<
Func
<
TEntity
,
object
>>>
IncludeExpressions
{
get
;
}
=
new
();
#
endregion
#
region
Order
by
public
Expression
<
Func
<
TEntity
,
object
>>?
OrderByExpression
{
get
;
private
set
;
}
public
Expression
<
Func
<
TEntity
,
object
>>?
OrderByDescendingExpression
{
get
;
private
set
;
}
#
endregion
#
region
Add
methods
protected
void
AddInclude
(
Expression
<
Func
<
TEntity
,
object
>>
includeExpression
)
{
IncludeExpressions
.
Add
(
includeExpression
);
}
protected
void
AddOrderBy
(
Expression
<
Func
<
TEntity
,
object
>>
orderByExpression
)
{
OrderByExpression
=
orderByExpression
;
}
protected
void
AddOrderByDescending
(
Expression
<
Func
<
TEntity
,
object
>>
orderByDescendingExpression
)
{
OrderByDescendingExpression
=
orderByDescendingExpression
;
}
#
endregion
}
Clinics.Backend/Persistence/Specifications/Evaluator/SpecificationEvaluator.cs
0 → 100644
View file @
5d8df969
using
Domain.Primitives
;
using
Microsoft.EntityFrameworkCore
;
using
Persistence.Specifications.Base
;
namespace
Persistence.Specifications.Evaluator
;
public
static
class
SpecificationEvaluator
{
public
static
IQueryable
<
TEntity
>
GetQuery
<
TEntity
>(
IQueryable
<
TEntity
>
inputQueryable
,
Specification
<
TEntity
>
specification
)
where
TEntity
:
Entity
{
IQueryable
<
TEntity
>
queryable
=
inputQueryable
;
if
(
specification
.
Criteria
is
not
null
)
{
queryable
=
queryable
.
Where
(
specification
.
Criteria
);
}
specification
.
IncludeExpressions
.
Aggregate
(
queryable
,
(
current
,
includeExpression
)
=>
current
.
Include
(
includeExpression
)
);
if
(
specification
.
OrderByExpression
is
not
null
)
{
queryable
=
queryable
.
OrderBy
(
specification
.
OrderByExpression
);
}
if
(
specification
.
OrderByDescendingExpression
is
not
null
)
{
queryable
=
queryable
.
OrderByDescending
(
specification
.
OrderByDescendingExpression
);
}
return
queryable
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment