| | 164 | |
| | 165 | === Креирање на корисник (!AuthService.cs) === |
| | 166 | |
| | 167 | Зошто Transaction? |
| | 168 | |
| | 169 | При креирање на корисник, за да се обезбеди целосност при хеширање на лозинка и при доделување улоги, како и за идни дополнителни операции. |
| | 170 | |
| | 171 | {{{ |
| | 172 | public async Task<bool> CreateUserAsync(User user, string password) |
| | 173 | { |
| | 174 | using var transaction = await _context.Database.BeginTransactionAsync(); |
| | 175 | try |
| | 176 | { |
| | 177 | user.Password = BCrypt.Net.BCrypt.HashPassword(password); |
| | 178 | |
| | 179 | _context.Users.Add(user); |
| | 180 | await _context.SaveChangesAsync(); |
| | 181 | |
| | 182 | await transaction.CommitAsync(); |
| | 183 | return true; |
| | 184 | } |
| | 185 | catch |
| | 186 | { |
| | 187 | await transaction.RollbackAsync(); |
| | 188 | return false; |
| | 189 | } |
| | 190 | } |
| | 191 | }}} |
| | 192 | |
| | 193 | === Бришење на производ (!ProductService.cs) === |
| | 194 | |
| | 195 | Зошто Transaction? |
| | 196 | |
| | 197 | Се користи Soft Delete (поставување на производот како неактивен). Ова е критична промена на податоци и ако врската со базата се прекине за време на процесот, состојбата на производот не смее да остане недефинирана. |
| | 198 | |
| | 199 | {{{ |
| | 200 | public async Task<bool> DeleteProductAsync(int id) |
| | 201 | { |
| | 202 | using var transaction = await _context.Database.BeginTransactionAsync(); |
| | 203 | try |
| | 204 | { |
| | 205 | var product = await _context.Products.FindAsync(id); |
| | 206 | |
| | 207 | if (product != null) |
| | 208 | { |
| | 209 | product.IsActive = false; |
| | 210 | await _context.SaveChangesAsync(); |
| | 211 | |
| | 212 | await transaction.CommitAsync(); |
| | 213 | return true; |
| | 214 | } |
| | 215 | |
| | 216 | return false; |
| | 217 | } |
| | 218 | catch |
| | 219 | { |
| | 220 | await transaction.RollbackAsync(); |
| | 221 | return false; |
| | 222 | } |
| | 223 | } |
| | 224 | }}} |