Skip to content

Commit 45dc73d

Browse files
v 2.0.0
1 parent 5f05374 commit 45dc73d

File tree

8 files changed

+114
-24
lines changed

8 files changed

+114
-24
lines changed

README.md

Lines changed: 105 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,22 @@ In today's digital world, effective file management is crucial for individuals a
1212
- .NET CLI
1313

1414
``` sh
15-
dotnet add package Sam.FileTableFramework --version 1.0.1
15+
dotnet add package Sam.FileTableFramework --version 2.0.0
1616
```
1717
- Package Manager
1818

1919
``` sh
20-
NuGet\Install-Package Sam.FileTableFramework -Version 1.0.1
20+
NuGet\Install-Package Sam.FileTableFramework -Version 2.0.0
2121
```
2222

2323
- Package Reference
2424
``` xml
25-
<PackageReference Include="Sam.FileTableFramework" Version="1.0.1" />
25+
<PackageReference Include="Sam.FileTableFramework" Version="2.0.0" />
2626
```
2727

2828
- Paket CLI
2929
``` sh
30-
paket add Sam.FileTableFramework --version 1.0.1
30+
paket add Sam.FileTableFramework --version 2.0.0
3131
```
3232

3333
3. Create your DbContext by inheriting from FileTableDbContext. Then, define a FtDbSet property for your tables.
@@ -67,6 +67,8 @@ In today's digital world, effective file management is crucial for individuals a
6767
6. Now you can inject DatabaseContext in your classes and use your tables, for example, see the source code below
6868
``` c#
6969
using Microsoft.AspNetCore.Mvc;
70+
using Sam.EndPoint.WebApi.Models;
71+
using Sam.FileTableFramework.Linq;
7072
using Sam.Persistence;
7173
using System.Net.Mime;
7274

@@ -80,49 +82,138 @@ In today's digital world, effective file management is crucial for individuals a
8082
[HttpGet("GetPaged/{page}/{pageCount}")]
8183
public async Task<IActionResult> GetPaged(int page, int pageCount)
8284
{
83-
return Ok(await databaseContext.Table1.GetPagedListAsync(page, pageCount));
85+
var skip = (page - 1) * pageCount;
86+
87+
var query = databaseContext.Table1;
88+
89+
var result = await query
90+
.Skip(skip)
91+
.Take(pageCount)
92+
.OrderBy(p => p.name)
93+
.ToListAsync(p => new FileEntityDto()
94+
{
95+
Name = p.name,
96+
Size = p.cached_file_size,
97+
Id = p.stream_id,
98+
Type = p.file_type
99+
});
100+
101+
return Ok(result);
84102
}
85103

86104
[HttpGet("GetAll")]
87105
public async Task<IActionResult> GetAll()
88106
{
89-
return Ok(await databaseContext.Table1.GetAllAsync());
107+
var query = databaseContext.Table1;
108+
109+
var result = await query
110+
.ToListAsync(p => new FileEntityDto()
111+
{
112+
Name = p.name,
113+
Size = p.cached_file_size,
114+
Id = p.stream_id,
115+
Type = p.file_type
116+
});
117+
118+
return Ok(result);
90119
}
91120

92121
[HttpGet("Count")]
93122
public async Task<IActionResult> Count()
94123
{
95-
return Ok(await databaseContext.Table1.Count());
124+
var query = databaseContext.Table1;
125+
return Ok(await query.CountAsync());
96126
}
97127

98128
[HttpGet("Download/{name}")]
99129
public async Task<IActionResult> Download(string name)
100130
{
101-
var result = await databaseContext.Table1.FindByNameAsync(name);
131+
var entity = await databaseContext.Table1.Where($"name = '{name}'").FirstOrDefaultAsync();
102132

103-
if (result is null)
104-
return NotFound(name);
133+
if (entity is null)
134+
return NotFound(nameof(NotFound));
105135

106-
return File(result.file_stream!, MediaTypeNames.Application.Octet, result.name);
136+
return File(entity.file_stream!, MediaTypeNames.Application.Octet, entity.name);
107137
}
108138

109139
[HttpPost("Upload")]
110140
public async Task<IActionResult> Upload(IFormFile file)
111141
{
112-
var fileName = Guid.NewGuid() + file.FileName[file.FileName.LastIndexOf(".", StringComparison.Ordinal)..];
142+
var fileName = Guid.NewGuid() + file.FileName[file.FileName.LastIndexOf('.')..];
113143
var stream = file.OpenReadStream();
114-
return Ok(await databaseContext.Table1.CreateAsync(fileName, stream));
144+
145+
await databaseContext.Table1.CreateAsync(fileName, stream);
146+
147+
return Ok(fileName);
115148
}
116149

117150
[HttpDelete("Delete")]
118151
public async Task<IActionResult> Delete(string name)
119152
{
120-
return Ok(await databaseContext.Table1.RemoveByNameAsync(name));
153+
var entity = await databaseContext.Table1.Where($"name = '{name}'").FirstOrDefaultAsync();
154+
155+
if (entity is null)
156+
return NotFound(nameof(NotFound));
157+
158+
var temp = await databaseContext.Table1.RemoveAsync(entity);
159+
160+
return Ok(temp);
161+
}
162+
163+
[HttpGet("TestQueryString")]
164+
public async Task<IActionResult> TestQueryString()
165+
{
166+
167+
var query = databaseContext.Table1;
168+
169+
var result = query
170+
.Take(3)
171+
.Skip(2)
172+
.Where("name = 'saman'")
173+
.OrderBy(p => p.name)
174+
.OrderBy(p => p.is_archive)
175+
.OrderByDescending(p => p.stream_id)
176+
.OrderBy(p => p.creation_time)
177+
.Select(p => new FileEntityDto()
178+
{
179+
Name = p.name,
180+
Size = p.cached_file_size,
181+
Id = p.stream_id,
182+
Type = p.file_type
183+
});
184+
185+
return Ok(new
186+
{
187+
Query = result.ToQueryString(),
188+
Data = await result.ToListAsync(p => new FileEntityDto()
189+
{
190+
Name = p.name,
191+
Size = p.cached_file_size,
192+
Id = p.stream_id,
193+
Type = p.file_type
194+
})
195+
});
121196
}
197+
198+
}
199+
200+
public class FileEntityDto
201+
{
202+
public Guid Id { get; set; }
203+
public string? Name { get; set; }
204+
public string? Type { get; set; }
205+
public long Size { get; set; }
122206
}
123207
}
124208
```
209+
125210
# Conclusion
126211
127212
In this article, we delved into creating a file management application using ASP.NET Core and SQL Server FileTable. This application provides functionalities for organizing and managing files in a web environment. Leveraging modern technologies and tools like FileTable, we were able to build a secure, reliable, and high-performance application.
128213
214+
215+
# Support
216+
If you are having problems, please let me know by [raising a new issue](https://github.com/samanazadi1996/Sam.FileTableSqlServer/issues).
217+
218+
# License
219+
This project is licensed with the [MIT license](https://github.com/samanazadi1996/Sam.FileTableSqlServer?tab=MIT-1-ov-file#readme).
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
using Sam.FileTableFramework.Extentions;
2-
using Sam.Persistence;
32
using Sam.FileTableFramework.Linq;
3+
using Sam.Persistence;
44
using System;
55

66
var connectionStrings = "Data Source =.; Initial Catalog = db1; Integrated Security = true";
77
var db = new DatabaseContext();
88
db.UseSqlServer(connectionStrings);
99
db.Migrate();
1010

11-
var result = await db.Table1.CountAsync();
11+
var result = await db.Table1.Where("[is_readonly] = 0").CountAsync();
1212

1313
Console.WriteLine($"Count Files in Table1 : {result}");
1414
Console.ReadKey();

Source/Sam.EndPoint.WebApi/Controllers/FileController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public async Task<IActionResult> Download(string name)
7171
[HttpPost("Upload")]
7272
public async Task<IActionResult> Upload(IFormFile file)
7373
{
74-
var fileName = Guid.NewGuid() + file.FileName[file.FileName.LastIndexOf(".", StringComparison.Ordinal)..];
74+
var fileName = Guid.NewGuid() + file.FileName[file.FileName.LastIndexOf('.')..];
7575
var stream = file.OpenReadStream();
7676

7777
await databaseContext.Table1.CreateAsync(fileName, stream);

Source/Sam.EndPoint.WebApi/Models/FileEntityDto.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
public class FileEntityDto
44
{
55
public Guid Id { get; set; }
6-
public string Name { get; set; }
7-
public string Type { get; set; }
6+
public string? Name { get; set; }
7+
public string? Type { get; set; }
88
public long Size { get; set; }
99
}
1010
}

Source/Sam.FileTableFramework/Context/Internall/ContextQuery.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ internal ContextQuery(FtDbSet ftDbSet)
1212
internal string TableName { get; set; }
1313
internal string ConnectionString { get; set; }
1414
internal List<string>? Fields { get; set; }
15-
internal int? Skip { get; set; }
16-
internal int? Take { get; set; }
1715
internal List<string>? Where { get; set; }
1816
internal List<string>? OrderBy { get; set; }
17+
internal int? Skip { get; set; }
18+
internal int? Take { get; set; }
1919
}
2020
}

Source/Sam.FileTableFramework/Extentions/ServiceCollocationExtentions.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using Microsoft.Extensions.DependencyInjection;
22
using Sam.FileTableFramework.Context;
33
using System;
4-
using System.Linq;
54

65
namespace Sam.FileTableFramework.Extentions
76
{

Source/Sam.FileTableFramework/Linq/FtDbSetLinq.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ public static string ToQueryString(this ContextQuery contextQuery)
204204
var skipClause = contextQuery.Skip.HasValue ? $"OFFSET {contextQuery.Skip.Value} ROWS" : string.Empty;
205205
var takeClause = contextQuery.Take.HasValue ? $"FETCH NEXT {contextQuery.Take.Value} ROWS ONLY" : string.Empty;
206206

207-
var queryString = $"SELECT {selectClause} {fromClause} {whereClause} {orderByClause} {skipClause} {takeClause};";
207+
var queryString = $"SELECT {selectClause} {fromClause} {whereClause} {orderByClause} {skipClause} {takeClause}";
208208

209209
return queryString.Trim();
210210
}

Source/Sam.FileTableFramework/Sam.FileTableFramework.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<PackageProjectUrl>https://github.com/samanazadi1996/Sam.FileTableSqlServer</PackageProjectUrl>
88
<RepositoryUrl>https://github.com/samanazadi1996/Sam.FileTableSqlServer</RepositoryUrl>
99
<RepositoryType>github</RepositoryType>
10-
<VersionPrefix>1.0.1</VersionPrefix>
10+
<VersionPrefix>2.0.0</VersionPrefix>
1111
<PackageTags>sql-server-filetable;filetable;csharp;dotnet</PackageTags>
1212
<Authors>Saman Azadi</Authors>
1313
<PackageIcon>PackageIcon.png</PackageIcon>

0 commit comments

Comments
 (0)